Тип данных bigint

Тип данных bigint позволяет работать с целыми числами больших размеров. Чтобы создать число этого типа, нужно добавить букву n после целочисленного литерала:

let n = 10n;
console.log(n);             // 10n
console.log(typeof n);      // bigint

Можно также воспользоваться функцией BigInt(<Значение>), которая преобразует указанное значение в число типа bigint:

let n = BigInt('10');
console.log(n);             // 10n
console.log(typeof n);      // bigint

Если преобразование невозможно, то будет сгенерировано исключение:

let n = BigInt('str');
// SyntaxError: Cannot convert str to a BigInt

Над двумя числами типа bigint можно выполнять математические (кроме унарного оператора +) и побитовые (кроме оператора >>>) операции. При этом деление всегда возвращает целочисленное значение типа bigint, даже в том случае, если деление выполнено с остатком:

let n = BigInt(Number.MAX_SAFE_INTEGER);
console.log(n + 1n);  // 9007199254740992n
console.log(n - 1n);  // 9007199254740990n
console.log(n * 2n);  // 18014398509481982n
n = 10n;
console.log(n / 3n);  // 3n
console.log(n % 4n);  // 2n
console.log(n ** 2n); // 100n
console.log(++n);     // 11n
console.log(--n);     // 10n
console.log(-n);      // -10n
console.log(~n);      // -11n
let x = 100n, y = 75n, z;
z = x & y;
console.log( z.toString(2) );  // 1000000
z = x | y;
console.log( z.toString(2) );  // 1101111
y = 250n;
z = x ^ y;
console.log( z.toString(2) );  // 10011110
x = x << 1n;
console.log( x.toString(2) );  // 11001000
x = x >> 1n;
console.log( x.toString(2) );  // 1100100

Если в операции участвуют типы number и bigint, то будет сгенерировано исключение, поэтому не забудьте выполнить преобразование типов:

let x = 10n, y = 2, z;
z = x + y;
// TypeError: Cannot mix BigInt and other types, 
// use explicit conversions

Исключением являются операции сравнения и логические операции:

let x = 10n, y = 2, z = 10;
console.log(x == z);  // true
console.log(x === z); // false
console.log(x < y);   // false
console.log(x > y);   // true
console.log(x <= z);  // true
console.log(x >= z);  // true
console.log( !!x );   // true

Чтобы преобразовать число типа bigint в число типа number, следует воспользоваться функцией Number(), но при этом следует учитывать возможную потерю точности:

let x = 10n, y;
y = Number(x);
console.log(y);        // 10
console.log(typeof y); // number

Чтобы из числа типа bigint получить строку, следует воспользоваться методом toString([<Основание>]):

let x = 15n;
let str = x.toString();      // "15"
console.log(typeof str);     // string
x = 100n;
console.log(x.toString(2));  // 1100100
x = 119n;
console.log(x.toString(8));  // 167
x = 255n;
console.log(x.toString(16)); // ff

Для получения строки в зависимости от настроек локали применяется метод toLocaleString([<Локаль>[, <Настройки>]]):

let x = BigInt(Number.MAX_SAFE_INTEGER);
console.log(x.toLocaleString('en-US'));
// 9,007,199,254,740,991
Примечание

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов