BigInt w JavaScript
- Poprzednia strona Numer JS
- Następna strona Metody numeryczne JS
Zmienne BigInt w JavaScript są używane do przechowywania wartości całkowitych, które są zbyt duże, aby być reprezentowanymi przez zwykłe liczby JavaScript.
Dokładność liczb całkowitych w JavaScript
JavaScript może dokładnie reprezentować liczby całkowite tylko do 15 miejsc po przecinku:
Dokładność liczb całkowitych
let x = 999999999999999; let y = 9999999999999999;
W JavaScript wszystkie liczby są przechowywane w formacie 64-bitowego formatu zmiennoprzecinkowego (standard IEEE 754).
Zgodnie z tym standardem, duże liczby całkowite nie mogą być dokładnie reprezentowane i są zaokrąglane.
Dlatego JavaScript może bezpiecznie reprezentować tylko liczby całkowite w następującym zakresie:
- największa 9007199254740991(253-1)
- najmniejsza -9007199254740991(-(253-1))
Liczby całkowite poza tym zakresem tracą dokładność.
Jak utworzyć BigInt
Aby utworzyć BigInt, można dodać n
lub wywołanie BigInt()
Funkcja:
Przykład 1
let x = 9999999999999999; let y = 9999999999999999n;
Przykład 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt: nowy typ danych w JavaScript
Typ JavaScript dla BigInt to "bigint
:
Przykład
let x = BigInt(999999999999999); let type = typeof x;
BigInt jest drugim typem liczbowym w JavaScript (po Number).
Dla BigInt, liczba typów danych obsługiwanych przez JavaScript wynosi 8:
- Ciąg znaków
- Liczba
- Bigint
- Logiczny
- Nieokreślona
- Pusta
- Symbol
- Obiekt
Operatorzy BigInt
Operatorzy dostępne dla JavaScript Number można również używać z BigInt.
Przykład mnożenia BigInt
let x = 9007199254740995n; let y = 9007199254740995n; let z = x * y;
Uwaga
Nie można wykonywać operacji arytmetycznych (konwersji typów) między BigInt a Number (konwersja typu może utracić informacje).
BigInt nie może wykonywać operacji przesunięcia w prawo bez znaku (>>>), ponieważ nie ma stałej szerokości.
Ułamki BigInt
BigInt nie może mieć ułamków.
Przykład dzielenia BigInt
let x = 5n; let y = x / 2; // Błąd: Nie można mieszać BigInt i innych typów, użyj wyraźnej konwersji.
let x = 5n; let y = Number(x) / 2;
BigInt w formacie szesnastkowego, ósemkowego i dwójkowego
BigInt może być również zapisany w formacie szesnastkowego, ósemkowego lub dwójkowego:
Przykład BigInt w formacie szesnastkowym
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
Precision Curiosity
Zaokrąglanie może zagrażać bezpieczeństwu programu:
Przykład MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // To prawda !!!
Wsparcie przeglądarek
Od września 2020 roku wszystkie przeglądarki wspierają BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
Maj 2018 roku | Styczeń 2020 roku | Lipiec 2019 roku | Wrzesień 2020 roku | Czerwiec 2018 roku |
Najmniejsza i największa liczba bezpieczna
ES6 dodaje również atrybuty max i min do obiektu Number:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Przykład MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER;
Przykład MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
Nowe metody liczbowe
ES6 dodaje również dwa nowe metody do obiektu Number:
Number.isInteger()
Number.isSafeInteger()
Metoda Number.isInteger()
Jeśli parametr jest liczbą całkowitą, metoda Number.isInteger() zwraca true
.
Przykład isInteger()
Number.isInteger(10); Number.isInteger(10.5);
Metoda Number.isSafeInteger()
Bezpieczne liczby całkowite to liczby całkowite, które można dokładnie wyrazić jako liczby zmiennoprzecinkowe.
Jeśli parametr jest bezpiecznym liczbą całkowitą, metoda Number.isSafeInteger() zwraca true
.
Przykład isSafeInteger()
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
Bezpieczne liczby całkowite to liczby całkowite z zakresu -(253 - 1) do +(253 - 1) wszystkich liczb całkowitych.
To jest bezpieczny整数:9007199254740991. To nie jest bezpieczny整数:9007199254740992.
- Poprzednia strona Numer JS
- Następna strona Metody numeryczne JS