JavaScript BigInt


Inhaltsverzeichnis

    Inhaltsverzeichnis anzeigen

JavaScript-BigInt-Variablen werden zum Speichern großer Ganzzahlwerte verwendet die zu groß sind, um durch eine normale JavaScript-Zahl dargestellt zu werden.

JavaScript-Ganzzahlgenauigkeit

JavaScript-Ganzzahlen sind nur bis zu 15 Ziffern genau:

Ganzzahlige Präzision

let x = 999999999999999;
let y = 9999999999999999;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>

<p id="demo"></p>

<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


In JavaScript werden alle Zahlen in einem 64-Bit-Gleitkommaformat (IEEE 754-Standard) gespeichert.

Mit diesem Standard können große Ganzzahlen nicht exakt dargestellt werden und werden gerundet.

Aus diesem Grund kann JavaScript nur Ganzzahlen sicher darstellen:

Bis zu 9007199254740991 +(253-1)

Und

Bis -9007199254740991 -(253-1).

Ganzzahlige Werte außerhalb dieses Bereichs verlieren an Präzision.


So erstellen Sie ein BigInt

Um einen BigInt zu erstellen, hängen Sie n an das Ende einer Ganzzahl oder eines Aufrufs an BigInt():

Beispiele

let x = 9999999999999999;
let y = 9999999999999999n;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer and BigInt</h2>

<p id="demo"></p>

<script>
let x = 9999999999999999;
let y = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Create a BigInt</h2>

<p id="demo"></p>

<script>
let x = 123456789012345678901234567890n;
let y = BigInt("123456789012345678901234567890");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>



BigInt: Ein neuer JavaScript-Datentyp

Der JavaScript-typeof a BigInt ist „bigint“:

Beispiel

let x = BigInt(999999999999999);
let type = typeof x;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>BigInt typeof</h2>

<p>The typeof a BigInt is:</p>
<p id="demo"></p>

<script>
let x = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = typeof x;
</script>

</body>
</html>


BigInt ist der zweite numerische Datentyp in JavaScript (nach Nummer).

Mit BigInt beträgt die Gesamtzahl der unterstützten Datentypen in JavaScript 8:

1. Zeichenfolge
2. Nummer
3. Bigint
4. Boolescher Wert
5. Undefiniert
6. Null
7. Symbol
8. Objekt


BigInt-Operatoren

Operatoren, die für eine JavaScript-Zahl verwendet werden können kann auch auf einem BigInt verwendet werden.

Beispiel für eine BigInt-Multiplikation

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Multiply</h2>
<p>Operators that can be used a Number can be used on a BigInt.</p>
<p id="demo"></p>

<script>
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

document.getElementById("demo").innerHTML = z; 
</script>

</body>
</html>

Anmerkungen

Arithmetik zwischen einem BigInt und eine Nummer ist nicht zulässig (Typkonvertierung verliert Informationen).

Eine vorzeichenlose Rechtsverschiebung (>>>) kann auf einem BigInt nicht durchgeführt werden (es hat keine feste Breite).


BigInt-Dezimalzahlen

Ein BigInt kann keine Dezimalzahlen haben.

Beispiel für eine BigInt-Division

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Divide</h2>

<p>A BigInt can not have decimals.</p>
<p>Cannot mix BigInt and other types, use explicit conversions.</p>
<p id="demo"></p>

<script>
let x = 5n;
let y = Number(x) / 2;

document.getElementById("demo").innerHTML = y; 
</script>

</body>
</html>

BigInt Hex, Oktal und Binär

BigInt kann auch in hexadezimaler, oktaler oder binärer Schreibweise geschrieben werden:

BigInt Hex-Beispiel

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>Hex, Octal and Binary</h2>

<p id="demo"></p>


<script>
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

document.getElementById("demo").innerHTML = hex + "<br>" + oct + "<br>" + bin; 
</script>

</body>
</html>

Präzisions-Neugier

Rundungen können die Programmsicherheit gefährden:

MAX_SAFE_INTEGER Beispiel

9007199254740992 === 9007199254740993; // is true !!!

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Is 9007199254740992 equal to 9007199254740993?</p>

<p id="demo"></p>


<script>
let x = 9007199254740992 === 9007199254740993;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Browser-Unterstützung

BigInt wird seit September 2020 in allen Browsern unterstützt:

Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
May 2018 Jan 2020 Jul 2019 Sep 2020 Jun 2018


Minimale und maximale sichere Ganzzahlen

ES6 hat dem Number-Objekt Max- und Min-Eigenschaften hinzugefügt:

  • MAX_SAFE_INTEGER

  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER Beispiel

let x = Number.MAX_SAFE_INTEGER;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MAX_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MAX_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

MIN_SAFE_INTEGER Beispiel

let x = Number.MIN_SAFE_INTEGER;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MIN_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MIN_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Neue Zahlenmethoden

ES6 hat außerdem zwei neue Methoden zum Number-Objekt hinzugefügt:

  • Number.isInteger()

  • Number.isSafeInteger()


Die Number.isInteger()-Methode

Die Methode Number.isInteger() gibt true zurück, wenn das Argument eine Ganzzahl ist.

Beispiel: isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isInteger() Method</h2>

<p>The isInteger() method returns true if the argument is an integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isInteger(10) + "<br>" + Number.isInteger(10.5);
</script>

</body>
</html>

Die Number.isSafeInteger()-Methode

Eine sichere Ganzzahl ist eine Ganzzahl, die genau als Zahl mit doppelter Genauigkeit dargestellt werden kann.

Die Methode Number.isSafeInteger() gibt true zurück, wenn das Argument eine sichere Ganzzahl ist.

Beispiel isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isSafeInteger() Method</h2>

<p>The isSafeInteger() method returns true if the argument is a safe integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isSafeInteger(10) + "<br>" + Number.isSafeInteger(12345678901234567890);
</script>

</body>
</html>

Sichere Ganzzahlen sind alle Ganzzahlen von -(253 - 1) bis +(253 - 1).
Dies ist sicher: 9007199254740991. Dies ist nicht sicher: 9007199254740992.