From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/bigint/asintn/index.html | 79 ++++++ .../global_objects/bigint/asuintn/index.html | 72 +++++ .../reference/global_objects/bigint/index.html | 294 +++++++++++++++++++++ 3 files changed, 445 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/bigint/index.html (limited to 'files/ru/web/javascript/reference/global_objects/bigint') diff --git a/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html b/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html new file mode 100644 index 0000000000..67f371ecf6 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html @@ -0,0 +1,79 @@ +--- +title: BigInt.asIntN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +tags: + - BigInt + - JavaScript + - Method + - Reference + - asIntN +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +--- +
{{JSRef}}
+ +

BigInt.asIntN — это статический метод, который позволяет перенести BigInt-значение в целое число со знаком между  -2ширина-1 and 2ширина-1-1.

+ +
\{{EmbedInteractiveExample("pages/js/bigint-asintn.html")}}
+ + + +

Синтаксис

+ +
BigInt.asIntN(width, bigint);
+ +

Аргументы

+ +
+
width
+
Количество битов, доступных для целочисленного размера.
+
bigint
+
Целое число для зажима, чтобы соответствовать поставляемым битам.
+
+ +

Возвращаемое значение

+ +

Значение bigint по модулю 2width как целое число со знаком.

+ +

Примеры

+ +

Пребывание в 64-битных диапазонах

+ +

Метод  BigInt.asIntN() может быть полезен, чтобы оставаться в диапазоне 64-битной арифметики.

+ +
const max = 2n ** (64n - 1n) - 1n;
+
+BigInt.asIntN(64, max);
+// ↪ 9223372036854775807n
+
+BigInt.asIntN(64, max + 1n);
+// ↪ -9223372036854775807n
+// отрицательное число из-за переполнения
+
+ +

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

+ + + + + + + + + + + + +
СпецификацииСтатус
BigInt proposalStage 3
+ +

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

+ + + +

{{Compat("javascript.builtins.BigInt.asIntN")}}

+ +

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

+ + diff --git a/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html b/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html new file mode 100644 index 0000000000..6f3c09ba56 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html @@ -0,0 +1,72 @@ +--- +title: BigInt.asUintN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +--- +
{{JSRef}}
+ +

The BigInt.asUintN static method is used to wrap a BigInt value to an unsigned integer between 0 and 2width-1.

+ +
{{EmbedInteractiveExample("pages/js/bigint-asuintn.html", "taller")}}
+ + + +

Syntax

+ +
BigInt.asUintN(width, bigint);
+ +

Parameters

+ +
+
width
+
The amount of bits available for the integer size.
+
bigint
+
The integer to clamp to fit into the supplied bits.
+
+ +

Returns

+ +

The value of bigint modulo 2width as an unsigned integer.

+ +

Examples

+ +

Staying in 64-bit ranges

+ +

The BigInt.asUintN() method can be useful to stay in the range of 64-bit arithmetic.

+ +
const max = 2n ** 64n - 1n;
+
+BigInt.asUintN(64, max);
+// ↪ 18446744073709551615n
+
+BigInt.asUintN(64, max + 1n);
+// ↪ 0n
+// zero because of overflow
+ +

Specifications

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-bigint.asuintn', 'BigInt.asUintN()')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.BigInt.asUintN")}}

+ +

See also

+ + diff --git a/files/ru/web/javascript/reference/global_objects/bigint/index.html b/files/ru/web/javascript/reference/global_objects/bigint/index.html new file mode 100644 index 0000000000..9760700391 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/bigint/index.html @@ -0,0 +1,294 @@ +--- +title: BigInt +slug: Web/JavaScript/Reference/Global_Objects/BigInt +tags: + - BigInt + - JavaScript + - методы BigInt + - свойства BigInt +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt +--- +

{{JSRef}}

+ +

BigInt это встроенный объект, который предоставляет способ представлять целые числа больше 253 - 1, наибольшего числа, которое JavaScript может надежно представить с {{JSxRef("Number")}} примитивом. Это максимальное значение можно получить, обратившись к {{JSxRef("Number.MAX_SAFE_INTEGER")}}.

+ +
+
+ +

Описание

+ +

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
+
+ +

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

+ +
+

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

+ +

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

+
+ +

Тип

+ +

При проверке с использованием оператора typeof, BigInt выдает тип "bigint":

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

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

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

Операторы

+ +

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

+ +

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

+ +

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

+ +
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
+// ↪ 9007199254740991n
+
+const maxPlusOne = previousMaxSafe + 1n;
+// ↪ 9007199254740992n
+
+const theFuture = previousMaxSafe + 2n;
+// ↪ 9007199254740993n, это работает!
+
+const multi = previousMaxSafe * 2n;
+// ↪ 18014398509481982n
+
+const subtr = multi – 10n;
+// ↪ 18014398509481972n
+
+const mod = multi % 10n;
+// ↪ 2n
+
+const bigN = 2n ** 54n;
+// ↪ 18014398509481984n
+
+bigN * -1n
+// ↪ –18014398509481984n
+
+ +

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

+ +
+

Результат операции с дробным результатом будет округлен в меньшую сторону при использовании  BigInt.

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

Сравнения

+ +

BigInt равен {{JSxRef ("Number")}} только при нестрогом сравнении.

+ +
0n === 0
+// ↪ false
+
+0n == 0
+// ↪ true
+ +

{{JSxRef("Global_Objects/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 ведёт себя как {{JSxRef("Global_Objects/Number", "обычное число")}} в следующих случаях:

+ + + +
if (0n) {
+  console.log('Привет из if!');
+} else {
+  console.log('Привет из else!');
+}
+
+// ↪ "Привет из else!"
+
+0n || 12n
+// ↪ 12n
+
+0n && 12n
+// ↪ 0n
+
+Boolean(0n)
+// ↪ false
+
+Boolean(12n)
+// ↪ true
+
+!12n
+// ↪ false
+
+!0n
+// ↪ true
+
+ +

Конструктор

+ +
+
BigInt()
+
Создаёт объект {{jsxref("BigInt")}}.
+
+ +

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

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

Методы экземпляра

+ +
+
{{JSxRef("BigInt.prototype.toLocaleString()")}}
+
Возвращает строку с языко-зависимым представлением числа. Переопредедяет метод {{JSxRef("Object.prototype.toLocaleString()")}}.
+
{{JSxRef("BigInt.prototype.toString()")}}
+
Возвращает строку, представляющую указанный объект по указанному основанию системы счисления. Переопределяет метод {{JSxRef("Object.prototype.toString()")}}.
+
{{JSxRef("BigInt.prototype.valueOf()")}}
+
Возвращает примитивное значение указанного объекта. Переопределяет метод {{JSxRef("Object.prototype.valueOf()")}}.
+
+ +

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

+ +

Приведение

+ +

Поскольку приведение между {{JSxRef("Number")}} и BigInt может привести к потере точности, рекомендуется использовать BigInt только тогда, когда разумно ожидаются значения, превышающие 253 и не приводить между двумя типами.

+ +

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

+ +

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

+ +

Использование вместе с JSON

+ +

Использование {{jsxref("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 в качестве аргумента и возвращает BigInt
+function nthPrime(nth) {
+  let maybePrime = 2n;
+  let prime = 0n;
+
+  while (nth >= 0n) {
+    if (isPrime(maybePrime)) {
+      nth--;
+      prime = maybePrime;
+    }
+    maybePrime++;
+  }
+
+  return prime;
+}
+
+nthPrime(20n)
+// ↪ 73n
+ +

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

+ + + + + + + + + + +
Спецификация
{{SpecName("ESDraft", "#sec-bigint-objects", "BigInt objects")}}
+ +

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

+ +
+ + +

{{Compat("javascript.builtins.BigInt")}}

+
+ +

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

+ + -- cgit v1.2.3-54-g00ecf