BigInt в JavaScript
- Предыдущая страница Числовые методы JS
- Следующая страница Числовые методы JS
Переменные BigInt в JavaScript используются для хранения больших целых чисел, которые невозможно представить обычными числами JavaScript.
Точность целых чисел в JavaScript
JavaScript может точно представлять целые числа только до 15 знаков:
Точность целых чисел
let x = 999999999999999; let y = 9999999999999999;
В JavaScript все числа хранятся в формате 64-битного плавающей точки (стандарт IEEE 754).
Согласно этому стандарту, большие целые числа не могут быть точно представлены и будут округлены.
Таким образом, JavaScript может безопасно представлять целые числа только в следующем диапазоне:
- максимум 9007199254740991(253-1)
- минимум -9007199254740991-(253-1))
Числа за пределами этого диапазона теряют точность.
Как создать BigInt
Чтобы создать BigInt, можно добавить в конец числа n
или вызов BigInt()
Функция:
Пример 1
let x = 9999999999999999; let y = 9999999999999999n;
Пример 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt: новый тип данных JavaScript
Тип JavaScript для BigInt является "bigint
:
Пример
let x = BigInt(999999999999999); let type = typeof x;
BigInt является вторым числовым типом данных в JavaScript (после Number).
Для BigInt, JavaScript поддерживает всего 8 типов данных:
- Строка
- Number
- Bigint
- Boolean
- Неопределено
- Null
- Символ
- Объект
Операторы BigInt
Операторы, доступные для JavaScript Number, также доступны для 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 в шестнадцатеричном, восьмеричном и двоичном формате
BigInt также можно записать в шестнадцатеричном, восьмеричном или двоичном формате:
Пример BigInt в шестнадцатеричном формате
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
Curiosity о точности
Округление может угрожать безопасности программы:
Пример MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // Возвращает true !!!
Поддержка браузерами
С сентября 2020 года все браузеры поддерживают BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
Май 2018 года | Январь 2020 года | Июль 2019 года | Сентябрь 2020 года | Июнь 2018 года |
Минимальные и максимальные безопасные целые числа
ES6 добавил свойства max и min к объекту Number:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Пример MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER;
Пример MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
Новые числовые методы
ES6 добавил два новых метода для объекта Number:
Number.isInteger()
Number.isSafeInteger()
Метод Number.isInteger()
Если параметр является целым числом, то метод Number.isInteger() возвращает true
.
Пример isInteger()
Number.isInteger(10); Number.isInteger(10.5);
Метод Number.isSafeInteger()
Безопасные целые числа можно точно представить как двойную точность.
Если параметр является безопасным целым числом, то метод Number.isSafeInteger() возвращает true
.
Пример isSafeInteger()
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
Безопасные целые числа начинаются с -(253 - 1) до + (253 - 1) все целые числа.
Это безопасное целое: 9007199254740991. Это не безопасное целое: 9007199254740992.
- Предыдущая страница Числовые методы JS
- Следующая страница Числовые методы JS