BigInt di JavaScript
- Pagina precedente Numeri JS
- Pagina successiva Metodi numerici JS
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;
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 n
oppure chiamare BigInt()
Funzione:
Esempio 1
let x = 9999999999999999; let y = 9999999999999999n;
Esempio 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt: un nuovo tipo di dati JavaScript
Il tipo JavaScript di BigInt è "bigint
:
Esempio
let x = BigInt(999999999999999); let type = typeof x;
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:
- Stringa
- Numero
- Bigint
- Booleano
- Non definito
- Null
- Simbolo
- 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;
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;
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;
Curiosità sulla precisione
L'arondondamento potrebbe compromettere la sicurezza del programma:
Esempio di MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // true!!!
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;
Esempio di MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
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);
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);
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.
- Pagina precedente Numeri JS
- Pagina successiva Metodi numerici JS