JavaScript/Objekte/BigInt
Inhaltsverzeichnis
Der JavaScript-Datentyp BigInt ist dafür vorgesehen, ganze Zahlen mit beliebiger Größe zu verarbeiten. Das Limit ist der verfügbare Speicherplatz des Computers, bzw. das Limit, das Ihr Browser bereit ist, an Speicherplatz bereitzustellen. Zahlen mit mehreren Millionen an Stellen sind möglich, Sie müssen aber davon ausgehen, dass Rechnungen mit solchen Werten viel Zeit beanspruchen.
Erzeugen von BigInt-Werten
Die eingebaute JavaScript-Funktion BigInt
dient zur Konvertierung von ganzzahligen Number-Werten in BigInt-Werte. Alternativ gibt es die Möglichkeit, BigInt-Werte als Literal zu schreiben, dazu fügen Sie an die Ziffern des BigInt-Wertes ein n
an.
// 50-stellige BigInt Zahlen, die sich um 1 unterscheiden
const b1 = 12345678901234567890123456789012345678901234567890n;
const b2 = 12345678901234567890123456789012345678901234567891n;
console.log(b2 - b1); // Es wird korrekt 1 ausgegeben
Dieses Experiment würde mit normalen Number-Werten nicht gelingen, die größte verarbeitbare Number-Zahl findet sich in Number.MAX_SAFE_INTEGER
, das ist 900 7199 254 740 991
.
Operationen mit BigInt-Werten
Viele JavaScript-Operatoren unterstützen BigInt-Werte. Verwendbar sind:
- die arithmetischen Operatoren
+
,-
,*
,/
,%
und**
- die Vergleichsoperatoren
==
,===
,!=
,!==
,<
,<=
,>
und>
- Die Bitoperatoren
|
,&
,<<
,>>
und^
- Konvertierungen mit Object(), Boolean(), Number() und String()
- 0n gilt als falsy
Einige Dinge gehen aber nicht.
- Um nicht versehentlich Genauigkeit zu verlieren, gibt es keine automatische Typwandlung von BigInt zu Number. Sie können deshalb keine Ausdrücke mit Arithmetik- oder Bitoperatoren erstellen, die Number- und BigInt-Werte mischen. Ein Vergleich von Number- und BigInt-Werten ist dagegen möglich
- Wenn Sie einen BigInt-Wert als Array-Index verwenden, muss er zwischen 0 und (232-1) liegen (also einem UInt32-Wert entsprechen), um als numerischer Index akzeptiert zu werden und auf die
length
-Eigenschaft des Arrays Einfluss zu haben. Andere Werte werden in eine Zeichenkette konvertiert und dem Array-Objekt als normale Eigenschaft hinzugefügt. - Der unäre
+
-Operator kann für BigInt-Werte nicht verwendet werden. Zum Zeitpunkt der Spezifikation von BigInt wurden Kompatibilitätsprobleme mit bestehendem Code, z.B. in asm.js, befürchtet, was zu der Entscheidung geführt hat, diesen Operator für BigInt-Werte nicht neu zu definieren. - Der Bit-Operator
>>>
(vorzeichenlose Verschiebung nach rechts) ist unzulässig, weil BigInt-Werte grundsätzlich vorzeichenbehaftet sind.
Referenz
Bei BigInt-Werten handelt es sich nicht um Objekte, sondern um primitive Werte. Die Verwendung der BigInt
-Funktion als Konstruktor, d. h. zusammen mit dem new-Operator, ist nicht erlaubt. Es gibt aber - analog zu den anderen primitiven Typen - Methoden der BigInt-Funktion und auch ein BigInt.prototype-Objekt, dessen Methoden von BigInt-Werten verwendet werden können.
Methoden von BigInt
Methoden von BigInt.prototype
Die Links verweisen auf die Number
-Dokumentation, die Funktionalität ist identisch.