Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. BigInt

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

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.

Описание

BigInt создаётся путём добавленияn в конец целочисленного литерала —10n — или вызовом функцииBigInt().

js
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":

js
typeof 1n === "bigint"; // truetypeof BigInt("1") === "bigint"; // true

При оборачивании в объект, BigInt будет представлен как обычный объект:

js
typeof Object(1n) === "object"; // true

Операторы

Следующие операторы могут использоваться сBigInt (или объектом-обёрткойBigInt):+,*,-,**,%.

Побитовые операции также поддерживаются, кроме>>> (сдвиг вправо с заполнением нулями).

Не поддерживаемый унарный оператор (+)больше не ломает asm.js.

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.

js
const expected = 4n / 2n;// ↪ 2nconst rounded = 5n / 2n;// ↪ 2n, not 2.5n

Сравнения

BigInt равенNumber только при нестрогом сравнении.

js
0n === 0;// ↪ false0n == 0;// ↪ true

Обычные числа иBigInt можно сравнивать как обычно.

js
1n < 2;// ↪ true2n > 1;// ↪ true2 > 2;// ↪ false2n > 2;// ↪ false2n >= 2;// ↪ true

Они могут быть смешаны в массивах и отсортированы:

js
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 действуют как с другими объектами, указывая на равенство только когда сравнивается идентичный экземпляр объекта:

js
0n === Object(0n); // falseObject(0n) === Object(0n); // falseconst o = Object(0n);o === o; // true

Условные выражения

BigInt ведёт себя какобычное число в следующих случаях:

  • Преобразуется вBoolean через функциюBoolean
  • Используется с логическими операторамиLogical Operators||,&& и!
  • В условном тесте, таком какif statement.
js
if (0n) {  console.log("Привет из if!");} else {  console.log("Привет из else!");}// ↪ "Привет из else!"0n || 12n;// ↪ 12n0n && 12n;// ↪ 0nBoolean(0n);// ↪ falseBoolean(12n);// ↪ true!12n;// ↪ false!0n;// ↪ true

Конструктор

BigInt()

Создаёт объектBigInt.

Статические методы

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, если вам необходимо:

js
BigInt.prototype.toJSON = function () {  return this.toString();};

Теперь вместо ошибки,JSON.stringify будет создавать строку:

js
JSON.stringify(BigInt(1));// '"1"'

Примеры

Расчёт простых чисел

js
// Возвращает 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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp