Переменные JavaScript BigInt
используются для хранения больших целочисленных значений, которые слишком велики для представления обычным Number
JavaScript.
JavaScript Точность целых чисел
JavaScript Целые числа точны только до 15 цифр:
В JavaScript все числа хранятся в 64-битном формате с плавающей точкой (стандарт IEEE 754).
С этим стандартом большие целые числа не могут быть точно представлены и будут округлены.
Из-за этого JavaScript может безопасно представлять только целые числа:
До 9007199254740991 +(253-1)
и
До -9007199254740991 -(253-1).
Целочисленные значения за пределами этого диапазона теряют точность.
Как создать BigInt
Чтобы создать BigInt
, добавьте n в конец целого числа или вызовите
BigInt()
:
let x = 9999999999999999;
let y = 9999999999999999n;
Попробуйте сами »
let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)
Попробуйте сами »
BigInt: новый тип данных JavaScript
Тип BigInt
JavaScript — это "bigint":
let x = BigInt(999999999999999);
let type = typeof x;
Попробуйте сами »
BigInt
— второй числовой тип данных в JavaScript
(после Number
).
С BigInt
общее количество поддерживаемых типов данных в JavaScript равно 8:
1. String
2. Number
3. Bigint
4. Boolean
5. Undefined
6. Null
7. Symbol
8. Object
Операторы BigInt
Операторы, которые можно использовать с Числом
JavaScript, также можно использовать с BigInt
.
Пример умножения BigInt
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
Попробуйте сами »
Примечания
Арифметические действия между BigInt
и Number
не допускаются (преобразование типов теряет информацию).
Беззнаковый сдвиг вправо (>>>) не может быть выполнен для BigInt
(он не имеет фиксированной ширины).
Десятичные знаки BigInt
BigInt
не может иметь десятичных знаков.
Пример деления BigInt
let x = 5n;
let y = x / 2;
// Ошибка: нельзя смешивать BigInt и другие типы, используйте явное преобразование.
let x = 5n;
let y = Number(x) / 2;
Попробуйте сами »
BigInt Hex, Octal и Binary
BigInt
также можно записать в шестнадцатеричной, восьмеричной или двоичной системе счисления:
Пример BigInt Hex
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
Попробуйте сами »
Precision Curiosity
Округление может поставить под угрозу безопасность программы:
Пример MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // является true !!!
Попробуйте сами »
Поддержка браузеров
BigInt
поддерживается во всех браузерах с сентября 2020 года:
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
May 2018 | Jan 2020 | Jul 2019 | Sep 2020 | Jun 2018 |
Минимальные и максимальные безопасные целые числа
ES6 добавил свойства max и min к объекту Number:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Новые методы чисел
ES6 также добавил 2 новых метода к объекту числа:
Number.isInteger()
Number.isSafeInteger()
Метод Number.isInteger()
Метод Number.isInteger()
возвращает true
, если аргумент является целым числом.
Метод Number.isSafeInteger()
Безопасное целое число — это целое число, которое можно точно представить как число двойной точности.
Метод Number.isSafeInteger()
возвращает true
, если аргумент — безопасное целое число.
Пример isSafeInteger()
Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);
Попробуйте сами »
Безопасные целые числа — это все целые числа от -(253 - 1) до +(253 - 1).
Это безопасно: 9007199254740991. Это небезопасно: 9007199254740992.