This page was translated from English by the community.Learn more and join the MDN Web Docs community.
BigInt
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since сентябрь 2020 г..
BigInt это встроенный объект, который предоставляет способ представлять целые числа больше 253 - 1, наибольшего числа, которое JavaScript может надёжно представить сNumber примитивом. Это максимальное значение можно получить, обратившись кNumber.MAX_SAFE_INTEGER.
In this article
Описание
BigInt создаётся путём добавленияn в конец целочисленного литерала —10n — или вызовом функцииBigInt().
const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");// ↪ 9007199254740991nconst hugeBin = BigInt( "0b11111111111111111111111111111111111111111111111111111",);// ↪ 9007199254740991nВ некотором смысле он похож наNumber, но отличается в некоторых ключевых моментах — его нельзя использовать с методами во встроенном объектеMath и нельзя смешивать в операциях с любыми экземплярами Number.
Предупреждение:Number иBigInt нельзя смешивать в операциях — они должны быть приведены к тому же типу.
Будьте осторожны приводя значения туда и обратно, так как точность BigInt может быть потеряна при приведении к числу (Number).
Тип
При проверке с использованием оператораtypeof,BigInt выдаёт тип"bigint":
typeof 1n === "bigint"; // truetypeof BigInt("1") === "bigint"; // trueПри оборачивании в объект, BigInt будет представлен как обычный объект:
typeof Object(1n) === "object"; // trueОператоры
Следующие операторы могут использоваться сBigInt (или объектом-обёрткойBigInt):+,*,-,**,%.
Побитовые операции также поддерживаются, кроме>>> (сдвиг вправо с заполнением нулями).
Не поддерживаемый унарный оператор (+)больше не ломает asm.js.
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);// ↪ 9007199254740991nconst maxPlusOne = previousMaxSafe + 1n;// ↪ 9007199254740992nconst theFuture = previousMaxSafe + 2n;// ↪ 9007199254740993n, это работает!const multi = previousMaxSafe * 2n;// ↪ 18014398509481982nconst subtr = multi – 10n;// ↪ 18014398509481972nconst mod = multi % 10n;// ↪ 2nconst bigN = 2n ** 54n;// ↪ 18014398509481984nbigN * -1n// ↪ –18014398509481984nОператор/ также работает, как и ожидалось, с целыми числами. Однако, поскольку это BigInt, эта операция будет округляться в меньшую сторону, то есть она не будет возвращать какие-либо дробные цифры.
Предупреждение:Результат операции с дробным результатом будет округлён вменьшую сторону при использованииBigInt.
const expected = 4n / 2n;// ↪ 2nconst rounded = 5n / 2n;// ↪ 2n, not 2.5nСравнения
BigInt равенNumber только при нестрогом сравнении.
0n === 0;// ↪ false0n == 0;// ↪ trueОбычные числа иBigInt можно сравнивать как обычно.
1n < 2;// ↪ true2n > 1;// ↪ true2 > 2;// ↪ false2n > 2;// ↪ false2n >= 2;// ↪ trueОни могут быть смешаны в массивах и отсортированы:
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];// ↪ [4n, 6, -12n, 10, 4, 0, 0n]mixed.sort();// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]Обратите внимание, что сравнения собьектом-обёрткойBigInt действуют как с другими объектами, указывая на равенство только когда сравнивается идентичный экземпляр объекта:
0n === Object(0n); // falseObject(0n) === Object(0n); // falseconst o = Object(0n);o === o; // trueУсловные выражения
BigInt ведёт себя какобычное число в следующих случаях:
- Преобразуется в
Booleanчерез функциюBoolean - Используется с логическими операторами
Logical Operators||,&&и! - В условном тесте, таком как
if statement.
if (0n) { console.log("Привет из if!");} else { console.log("Привет из else!");}// ↪ "Привет из else!"0n || 12n;// ↪ 12n0n && 12n;// ↪ 0nBoolean(0n);// ↪ falseBoolean(12n);// ↪ true!12n;// ↪ false!0n;// ↪ trueКонструктор
Статические методы
BigInt.asIntN()Оборачивает BigInt в пределах от -2width-1 до 2width-1-1
BigInt.asUintN()Оборачивает a BigInt в пределах от 0 до 2width-1
Методы экземпляра
BigInt.prototype.toLocaleString()Возвращает строку с языкозависимым представлением числа. Переопределяет метод
Object.prototype.toLocaleString().BigInt.prototype.toString()Возвращает строку, представляющую указанный объект по указанному основанию системы счисления. Переопределяет метод
Object.prototype.toString().BigInt.prototype.valueOf()Возвращает примитивное значение указанного объекта. Переопределяет метод
Object.prototype.valueOf().
Рекомендации по использованию
>Приведение
Поскольку приведение междуNumber иBigInt может привести к потере точности, рекомендуется использоватьBigInt только тогда, когда разумно ожидаются значения, превышающие 253 и не приводить между двумя типами.
Криптография
Операции поддерживаемыеBigInt не постоянны во времени.BigInt следовательноне пригоден для использования в криптографии.
Использование вместе с JSON
ИспользованиеJSON.stringify() с любым значением типаBigInt приведёт кTypeError, поскольку значенияBigInt не преобразуется в JSON по умолчанию, однако вы можете реализовать свой собственный методtoJSON, если вам необходимо:
BigInt.prototype.toJSON = function () { return this.toString();};Теперь вместо ошибки,JSON.stringify будет создавать строку:
JSON.stringify(BigInt(1));// '"1"'Примеры
>Расчёт простых чисел
// Возвращает true, если BigInt — простое числоfunction isPrime(p) { for (let i = 2n; i * i <= p; i++) { if (p % i === 0n) return false; } return true;}// Берет BigInt в качестве аргумента и возвращает BigIntfunction nthPrime(nth) { let maybePrime = 2n; let prime = 0n; while (nth >= 0n) { if (isPrime(maybePrime)) { nth--; prime = maybePrime; } maybePrime++; } return prime;}nthPrime(20n);// ↪ 73nСпецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-bigint-objects> |