Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

BigInt это встроенный объект, который предоставляет способ представлять целые числа больше 253,это наибольшее число, которое JavaScript может надежно представить с Number примитивом.

Синтаксис

BigInt(значение);

Параметры

значение
Числовое значение создаваемого объекта. Может быть строкой или целым числом.

Примечание: BigInt() не используется с new оператором.

Описание

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

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n

const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n

const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

В некотором смысле он похож на Number, но отличается в некоторых ключевых моментах — его нельзя использовать с методами во встроенном объекте Math и нельзя смешивать в операциях с любыми экземплярами Number.

Number и BigInt нельзя смешивать в операциях — они должны быть приведены к тому же типу.

Будте осторожны приводя значения туда и обратно,  так как точность BigInt может быть потеряна при приведении к числу (Number).

Информация по типуданных

Когда проверено против typeof, BigInt даст "bigint":

typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true

Когда обернут в объект, BigInt будет рассматриваться как нормальный тип объекта:

typeof Object(1n) === 'object'; // true

Операторы

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

const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ↪ 9007199254740991

const maxPlusOne = previousMaxSafe + 1n;
// ↪ 9007199254740992n
 
const theFuture = previousMaxSafe + 2n;
// ↪ 9007199254740993n, this works now!

const multi = previousMaxSafe * 2n;
// ↪ 18014398509481982n

const subtr = multi – 10n;
// ↪ 18014398509481972n

const mod = multi % 10n;
// ↪ 2n

const bigN = 2n ** 54n;
// ↪ 18014398509481984n

bigN * -1n
// ↪ –18014398509481984n

Оператор / также работает, как и ожидалось, с целыми числами. Однако, поскольку это BigInts, а не BigDecimals, эта операция будет округляться до 0, то есть она не будет возвращать какие-либо дробные цифры.

Операция с дробным результатом будет усечена при использовании  BigInt.

const expected = 4n / 2n;
// ↪ 2n

const rounded = 5n / 2n;
// ↪ 2n, not 2.5n

Сравнения

BigInt не строгом сравнении равен Number, при строгом сравнении на равенство не равен.

0n === 0
// ↪ false

0n == 0
// ↪ true

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

1n < 2
// ↪ true

2n > 1
// ↪ true

2 > 2
// ↪ false

2n > 2
// ↪ false

2n >= 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); // false
Object(0n) === Object(0n); // false

const o = Object(0n);
o === o // true

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

BigInt ведет себя как Number в тех случаях, когда он преобразуется в Boolean: через функцию Boolean; при использовании с логическими операторами Logical Operators ||, &&, и !; или в условном тесте, таком как if statement.

if (0n) {
  console.log('Hello from the if!');
} else {
  console.log('Hello from the else!');
}

// ↪ "Hello from the else!"

0n || 12n
// ↪ 12n

0n && 12n
// ↪ 0n

Boolean(0n)
// ↪ false

Boolean(12n)
// ↪ true

!12n
// ↪ false

!0n
// ↪ true

Методы

BigInt.asIntN()
Оборачивает BigInt в пределах от -2width-1 до 2width-1-1
BigInt.asUintN()
Оборачивает a BigInt в пределах от 0 до 2width-1

Свойства

BigInt.prototype
Позволяет добавлять свойства к объекту BigInt.

BigInt экземпляры

Все BigInt экземпляры наследуются от BigInt.prototype. Прототип объекта конструктора BigInt можно изменить что-бы он влиял на все экземпляры BigInt.

Методы

BigInt.prototype.toLocaleString()
Returns a string with a language-sensitive representation of this number. Overrides the Object.prototype.toLocaleString() method.
BigInt.prototype.toString()
Returns a string representing the specified object in the specified radix (base). Overrides the Object.prototype.toString() method.
BigInt.prototype.valueOf()
Returns the primitive value of the specified object. Overrides the Object.prototype.valueOf() method.

Рекомендации по использованию

Приведение

Поскольку приведение между Number и BigInt can lead to loss of precision, it is recommended to only use BigInt может привести к потере точности, рекомендуется использовать BigInt только тогда, когда разумно ожидаются значения, превышающие 253 и не приводить между двумя типами.

Криптография

Операции поддерживаемые BigInts не постоянны во времени. BigIntследовательно не пригоден для использования в криптографии.

Примеры

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

function isPrime(p) {
  for (let i = 2n; i * i <= p; i++) {
    if (p % i === 0n) return false;
  }
  return true;
}

// Берет BigInt в качестве аргумента и возвращает BigInt
function nthPrime(nth) {
  let maybePrime = 2n;
  let prime = 0n;
  
  while (nth >= 0n) {
    if (isPrime(maybePrime)) {
      nth -= 1n;
      prime = maybePrime;
    }
    maybePrime += 1n;
  }
  
  return prime;
}

nthPrime(20n)
// ↪ 73n

Спецификации

Спецификация Статус
BigInt Stage 3

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
BigIntChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
asIntNChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
asUintNChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
prototypeChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
toLocaleStringChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
toStringChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0
valueOfChrome Полная поддержка 67Edge Нет поддержки НетFirefox Полная поддержка 68IE Нет поддержки НетOpera Полная поддержка 54Safari Нет поддержки НетWebView Android Полная поддержка 67Chrome Android Полная поддержка 67Firefox Android Полная поддержка 68Opera Android Полная поддержка 48Safari iOS Нет поддержки НетSamsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.4.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки

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

Метки документа и участники

Внесли вклад в эту страницу: Anna-Myzukina
Обновлялась последний раз: Anna-Myzukina,