Signatur
Beschreibung
BigInt() erzeugt aus einer Zahl, einer Zeichenkette, einem Wahrheitswert oder einem Objekt einen primitiven Wert vom Typ bigint. Mit BigInt lassen sich ganze Zahlen beliebiger Größe exakt darstellen, also auch jenseits von Number.MAX_SAFE_INTEGER (253 − 1). Typische Einsatzfälle sind große Datenbank-IDs (z. B. Snowflake-IDs), Kryptografie, exakte Zeitstempel in Nanosekunden oder Finanzberechnungen in kleinsten Einheiten.
Wichtig: Anders als bei Number oder String ist BigInt kein Konstruktor im klassischen Sinn. new BigInt(1) löst einen TypeError aus. Man ruft BigInt() daher immer als normale Funktion auf oder verwendet direkt ein Literal mit dem Suffix n, z. B. 123n.
Die Umwandlungsregeln sind streng:
- Zahlen müssen ganzzahlig sein.
BigInt(1.5),BigInt(NaN)undBigInt(Infinity)lösen einenRangeErroraus. - Zeichenketten werden als ganze Zahl gelesen, auch mit den Präfixen
0x,0ound0b. Leerraum am Anfang und Ende wird entfernt, und eine leere Zeichenkette ergibt0n. Dezimalpunkte, Exponenten oder das Suffixnführen zu einemSyntaxError. - Wahrheitswerte:
truewird zu1n,falsezu0n. undefined,nullundSymbol-Werte lösen einenTypeErroraus.- Objekte werden zuerst über
valueOf()bzw.toString()in einen primitiven Wert umgewandelt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | number | string | boolean | bigint | object | Der umzuwandelnde Wert. Zahlen müssen ganzzahlig sein. Zeichenketten müssen eine gültige ganze Zahl darstellen (dezimal, 0x, 0o oder 0b). |
Rückgabewert
typeof liefert dafür "bigint", nicht "object".Beispiele
Grundlegende Umwandlungen
console.log(BigInt(42)); // aus Number
console.log(BigInt('12345678901234567890')); // aus String
console.log(BigInt('0xff')); // Hexadezimal
console.log(BigInt(' 7 ')); // Leerraum wird entfernt
console.log(BigInt(true)); // aus Boolean
console.log(typeof BigInt(1));
new BigInt() ist nicht erlaubt
try {
const x = new BigInt(10);
} catch (err) {
console.log(err.constructor.name, '-', err.message);
}
// Richtig: als Funktion aufrufen oder ein Literal verwenden
const a = BigInt(10);
const b = 10n;
console.log(a === b);
Große IDs aus einer API exakt verarbeiten
// IDs als String übertragen, sonst geht beim JSON.parse Genauigkeit verloren
const payload = '{"id":"1234567890123456789"}';
const { id } = JSON.parse(payload);
const userId = BigInt(id);
const nextId = userId + 1n;
console.log(nextId.toString());
// Zum Vergleich: der Weg über Number verliert Stellen
console.log(BigInt(Number(id)).toString());
Sichere Umwandlung mit Fehlerbehandlung
const toBigIntSafe = (value) => {
try {
return BigInt(value);
} catch (err) {
console.log(`${String(value)} -> ${err.name}`);
return null;
}
};
toBigIntSafe(1.5); // Nachkommastellen
toBigIntSafe('1.5'); // ungültiger String
toBigIntSafe(undefined); // nicht umwandelbar
console.log(toBigIntSafe(Math.trunc(1.5)));
// Wichtig · Fallstricke
- Kein
new:new BigInt()löst immer einenTypeErroraus. Ein Wrapper-Objekt erhält man bei Bedarf nur mitObject(1n), was in der Praxis aber kaum gebraucht wird. - Genauigkeitsverlust vor der Umwandlung:
BigInt(9007199254740993)ergibt9007199254740992n, weil die Zahl schon als Number-Literal gerundet wird. Große Werte deshalb als String übergeben oder direkt als Literal9007199254740993nschreiben. - Kein Mischen der Typen:
1n + 1löst einenTypeErroraus. Vorher ausdrücklich mitBigInt()oderNumber()umwandeln. Vergleiche wie1n == 1oder2n > 1funktionieren dagegen. - Division: Das Ergebnis wird Richtung null abgeschnitten,
7n / 2nergibt also3n. - JSON:
JSON.stringify({ a: 1n })löst einenTypeErroraus. Abhilfe schafft eine Replacer-Funktion oderBigInt.prototype.toJSON. Math-Methoden nehmen keine BigInt-Werte an. Auch der unäre Operator+1nlöst einenTypeErroraus.- Kompatibilität: Unterstützt ab Chrome 67, Firefox 68, Safari 14 und Node.js 10.4. BigInt lässt sich nicht per Polyfill nachrüsten, weil die Literal-Syntax transpiliert werden müsste.
- Sicherheit: Operationen mit BigInt laufen nicht in konstanter Zeit. Für kryptografische Geheimnisse sind sie daher anfällig für Timing-Angriffe.