BigInt
Typ do dokładnych obliczeń na dowolnie dużych liczbach całkowitych. Literały kończą się literą n.
- Zwraca
- Wartość typu
bigint.
Przykład
#const big = 9007199254740993n
console.log(9007199254740993)
console.log(big)
console.log(big + 2n)
console.log(typeof big)Zwykła liczba 9007199254740993 leży poza zakresem dokładnych liczb, więc JavaScript zapisał ją jako najbliższą możliwą wartość, czyli 9007199254740992.
Definicja i zastosowanie
#Zwykłe liczby w JavaScripcie (typ number) są dokładne tylko do Number.MAX_SAFE_INTEGER, czyli 9007199254740991. Powyżej tej granicy tracą precyzję i sąsiednie liczby całkowite zaczynają się zlewać. BigInt to osobny typ prymitywny, który przechowuje liczby całkowite dowolnej wielkości bez utraty dokładności.
Wartość BigInt tworzysz, dopisując n do liczby (10n), albo funkcją BigInt(), która przyjmuje liczbę całkowitą lub napis z cyframi. Działają zwykłe operatory +, -, *, ** i %, a dzielenie / odcina część ułamkową. typeof 10n zwraca "bigint".
W jednym działaniu nie można mieszać typów: 10n + 1 rzuca TypeError, więc drugą wartość trzeba jawnie zamienić przez BigInt() albo Number(). BigInt nie działa z funkcjami Math, a JSON.stringify() rzuca dla niego błąd. Porównania, np. 10n > 5 czy 2n == 2, działają między typami, ale 2n === 2 zwraca false, bo typy są różne.
Składnia
#123n
BigInt(value)Parametry
#value
liczba całkowita lub napis
Wartość zamieniana naBigInt. Liczba z częścią ułamkową rzucaRangeError, a napis, który nie jest liczbą całkowitą,SyntaxError.
Więcej przykładów
#const max = Number.MAX_SAFE_INTEGER
console.log(max)
console.log(max + 1 === max + 2)
console.log(BigInt(max) + 1n === BigInt(max) + 2n)try {
console.log(10n + 1)
} catch (error) {
console.log(error.name)
}
console.log(10n + BigInt(1))
console.log(7n / 2n)
console.log(Number(7n) / 2)function factorial(n) {
let result = 1n
for (let i = 2n; i <= n; i++) {
result *= i
}
return result
}
console.log(factorial(25n))
console.log(Number(factorial(25n)))Obsługa przeglądarek
#Szeroko dostępne · od 2020 roku
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Identyfikatory z baz danych i API, które przekraczają
Number.MAX_SAFE_INTEGER, trzymaj jako napisy alboBigInt. Zamiana na zwykłą liczbę po cichu zmieni ostatnie cyfry. - Przed wysłaniem danych jako JSON zamień
BigIntna napis, np. przezvalue.toString().JSON.stringify()nie obsługuje tego typu i rzucaTypeError. BigIntnie ma części ułamkowej. Kwoty zapisuj w groszach i pamiętaj, że dzielenie zawsze ucina wynik do liczby całkowitej.
Powiązane hasła
#- Number.isInteger()Sprawdza, czy wartość jest liczbą całkowitą.
- typeofZwraca napis z nazwą typu wartości, np. "number", "string" albo "object".
- Number.prototype.toString()Zamienia liczbę na napis, także w innym systemie liczbowym, np. dwójkowym lub szesnastkowym.
- JSON.stringify()Zamienia wartość JavaScript, np. obiekt lub tablicę, na napis w formacie JSON.
- Math.pow()Podnosi liczbę do potęgi.
Widzisz błąd albo brakuje przykładu? Napisz do nas.