BigInt di JavaScript

Le variabili BigInt JavaScript vengono utilizzate per memorizzare valori interi troppo grandi per essere rappresentati con numeri JavaScript normali.

Precisione intera JavaScript

JavaScript può rappresentare interi con precisione fino a 15 cifre:

Precisione intera

let x = 999999999999999;
let y = 9999999999999999;

Prova direttamente

In JavaScript, tutti i numeri vengono memorizzati in formato di punto fluttuante a 64 bit (standard IEEE 754).

Secondo questo standard, i grandi numeri non possono essere rappresentati con precisione e vengono arrotondati.

Di conseguenza, JavaScript può rappresentare solo interi nel seguente intervallo in modo sicuro:

  • massimo 9007199254740991(253-1)
  • minimo -9007199254740991(-(253-1))

I valori interi al di fuori di questo intervallo perderanno la precisione.

Come creare BigInt

Per creare BigInt, è possibile aggiungere alla fine di un numero intero noppure chiamare BigInt() Funzione:

Esempio 1

let x = 9999999999999999;
let y = 9999999999999999n;

Prova direttamente

Esempio 2

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

Prova direttamente

BigInt: un nuovo tipo di dati JavaScript

Il tipo JavaScript di BigInt è "bigint

Esempio

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

Prova direttamente

BigInt è il secondo tipo di dati numerici in JavaScript (dopo Number).

Per BigInt, il numero totale di tipi di dati supportati da JavaScript è di 8:

  1. Stringa
  2. Numero
  3. Bigint
  4. Booleano
  5. Non definito
  6. Null
  7. Simbolo
  8. Oggetto

Operatori BigInt

Gli operatori disponibili per Number JavaScript possono anche essere utilizzati per BigInt.

Esempio di moltiplicazione BigInt

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

Prova direttamente

Attenzione

Non è permesso eseguire operazioni aritmetiche (conversioni di tipo) tra BigInt e Number (la conversione perderà informazioni).

BigInt non può eseguire l'operazione di shift a destra senza segno (>>>), poiché non ha una larghezza fissa.

Numeri decimali in BigInt

BigInt non può avere numeri decimali.

Esempio di divisione BigInt

let x = 5n;
let y = x / 2;
// Errore: Non è possibile mescolare BigInt con altri tipi, utilizzare conversione esplicita.
let x = 5n;
let y = Number(x) / 2;

Prova direttamente

BigInt in esadecimale, ottale e binario

BigInt può essere rappresentato anche in esadecimale, ottale o binario:

Esempio di BigInt in esadecimale

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

Prova direttamente

Curiosità sulla precisione

L'arondondamento potrebbe compromettere la sicurezza del programma:

Esempio di MAX_SAFE_INTEGER

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

Prova direttamente

Supporto dei browser

Da settembre 2020, tutti i browser supportano BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Maggio 2018 Gennaio 2020 Luglio 2019 Settembre 2020 Giugno 2018

Integri sicuri minimi e massimi

ES6 ha aggiunto le proprietà max e min all'oggetto Number:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

Esempio di MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

Prova direttamente

Esempio di MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

Prova direttamente

Nuove funzioni numeriche

ES6 ha aggiunto due nuove funzioni all'oggetto Number:

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

Metodo Number.isInteger()

Se il parametro è un intero, il metodo Number.isInteger() restituisce true.

Esempio isInteger()

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

Prova direttamente

Metodo Number.isSafeInteger()

Gli interi sicuri sono interi che possono essere rappresentati con precisione come numeri a doppia precisione.

Se il parametro è un intero sicuro, il metodo Number.isSafeInteger() restituisce true.

Esempio isSafeInteger()

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

Prova direttamente

Gli interi sicuri sono da -(253 di -(2 a + (253 di tutti gli interi. - 1)

Questo è un intero sicuro: 9007199254740991. Questo non è un intero sicuro: 9007199254740992.