JavaScript BigInt

JavaScript BigInt variables are used to store large integer values that are too large to be represented by ordinary JavaScript numbers.

JavaScript integer precision

JavaScript integers can only be precise up to 15 digits:

Integer precision

let x = 999999999999999;
let y = 9999999999999999;

Probeer het zelf

In JavaScript, all numbers are stored in 64-bit floating-point format (IEEE 754 standard).

According to this standard, large integers cannot be represented accurately and will be rounded.

Therefore, JavaScript can only safely represent integers within the following range:

  • Maximum is 9007199254740991(253-1) )
  • Minimum is -9007199254740991(- (253-1) )

Integer values outside this range will lose precision.

How to create BigInt

To create BigInt, you can add n, or call BigInt() Function:

Example 1

let x = 9999999999999999;
let y = 9999999999999999n;

Probeer het zelf

Example 2

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

Probeer het zelf

BigInt: a new JavaScript data type

The JavaScript type of BigInt is "bigint:

Example

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

Probeer het zelf

BigInt is the second numeric data type in JavaScript (after Number).

For BigInt, JavaScript supports a total of 8 data types:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. Object

BigInt operators

Operators that can be used with JavaScript Number can also be used with BigInt.

BigInt multiplication example

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

Probeer het zelf

Let op

Het is niet toegestaan om wiskundige operaties uit te voeren tussen BigInt en Number (de typeconversie verliest informatie).

BigInt kan geen unsigned right shift operatie (>>>), omdat het geen vaste breedte heeft.

BigInt decimale waarden

BigInt kan geen decimale waarden hebben.

BigInt delingsvoorbeeld

let x = 5n;
let y = x / 2;
// Fout: Kan geen BigInt en andere typen mengen, gebruik expliciete conversie.
let x = 5n;
let y = Number(x) / 2;

Probeer het zelf

BigInt hexadecimaal, octaal en binair

BigInt kan ook worden geschreven in hexadecimale, octale of binare notatie:

BigInt hexadecimaal voorbeeld

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

Probeer het zelf

Precision Curiosity

Rondingen kunnen de beveiliging van het programma in gevaar brengen:

MAX_SAFE_INTEGER voorbeeld

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

Probeer het zelf

Browserondersteuning

Sinds september 2020 ondersteunen alle browsers BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Mei 2018 Januari 2020 Juli 2019 September 2020 Juni 2018

Minimale en maximale veilige integers

ES6 heeft ook de max en min eigenschappen toegevoegd aan het Number-object:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER voorbeeld

let x = Number.MAX_SAFE_INTEGER;

Probeer het zelf

MIN_SAFE_INTEGER voorbeeld

let x = Number.MIN_SAFE_INTEGER;

Probeer het zelf

Nieuwe numerieke methoden

ES6 heeft ook twee nieuwe methoden toegevoegd aan het Number-object:

  • Number.isInteger()
  • Number.isSafeInteger()

Methode Number.isInteger()

Als het argument een geheeltal is, retourneert de methode Number.isInteger() true.

isInteger() voorbeeld

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

Probeer het zelf

Methode Number.isSafeInteger()

Veilige gehele getallen zijn gehele getallen die exact kunnen worden weergegeven als een dubbele precisie-getal.

Als het argument een veilig geheeltal is, retourneert de methode Number.isSafeInteger() true.

isSafeInteger() voorbeeld

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

Probeer het zelf

Veilige gehele getallen zijn gehele getallen van -(253 - 1) tot +(253 - 1) van alle gehele getallen.

Dit is een veiligheidsgetal: 9007199254740991. Dit is geen veiligheidsgetal: 9007199254740992.