JavaScript/Objekte/BigInt

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

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.

Erzeugen von BigInt-Werten
           // 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.