TypeError: can't convert BigInt to number

Die JavaScript-Ausnahme "can't convert BigInt to number" tritt auf, wenn eine arithmetische Operation eine Mischung aus BigInt- und Number-Werten beinhaltet.

Meldung

TypeError: Cannot convert a BigInt value to a number (V8-based)
TypeError: Cannot mix BigInt and other types, use explicit conversions (V8-based)
TypeError: BigInts have no unsigned right shift, use >> instead (V8-based)
TypeError: can't convert BigInt to number (Firefox)
TypeError: Conversion from 'BigInt' to 'number' is not allowed. (Safari)
TypeError: Invalid mix of BigInt and other type in addition/multiplication/…. (Safari)
TypeError: BigInt does not support >>> operator (Safari)

Fehlertyp

Was ist schiefgelaufen?

Die beiden Seiten eines arithmetischen Operators müssen entweder beide BigInts oder beide keine BigInts sein. Wenn eine Operation eine Mischung aus BigInts und Zahlen beinhaltet, ist es unklar, ob das Ergebnis ein BigInt oder eine Zahl sein sollte, da in beiden Fällen ein Präzisionsverlust auftreten kann.

Der Fehler tritt auch auf, wenn ein BigInt implizit durch den Zahlenerzwingungsprozess in eine Zahl umgewandelt wird. Zum Beispiel, wenn ein BigInt an eine eingebaute Methode übergeben wird, die eine Zahl erwartet.

Der Fehler kann auch auftreten, wenn der unsigned right shift operator (>>>) zwischen zwei BigInts verwendet wird. In Firefox ist die Fehlermeldung dieselbe: "can't convert BigInt to number".

Beispiele

Mischen von Zahlen und BigInts in Operationen

js
const sum = 1n + 1;
// TypeError: can't convert BigInt to number

Stattdessen eine Seite explizit zu einem BigInt oder einer Zahl umwandeln.

js
const sum = 1n + BigInt(1);
const sum2 = Number(1n) + 1;

Verwenden des unsigned right shift auf BigInts

js
const a = 4n >>> 2n;
// TypeError: can't convert BigInt to number

Verwenden Sie stattdessen die normale Rechtsverschiebung.

js
const a = 4n >> 2n;

Siehe auch