Новая возможность
Эта возможность была добавлена в язык недавно. Узнать, где есть поддержка, можно на https://caniuse.com/#feat=bigint.
BigInt – это специальный числовой тип, который предоставляет возможность работать с целыми числами произвольной длины.Чтобы создать значение типа
BigInt, необходимо добавить n в конец числового литерала или вызвать функцию BigInt, которая создаст число типа BigInt из переданного аргумента. Аргументом может быть число, строка и др.const bigint = 1234567890123456789012345678901234567890n;const sameBigint = BigInt("1234567890123456789012345678901234567890");const bigintFromNumber = BigInt(10); // то же самое, что и 10nМатематические операторы
BigInt можно использовать как обычные числа, к примеру:alert(1n + 2n); // 3alert(5n / 2n); // 2Обратите внимание: операция деления
5/2 возвращает округлённый результат, без дробной части. Все операции с числами типа bigint возвращают bigint.В математических операциях мы не можем смешивать
bigint и обычные числа:alert(1n + 2); // Error: Cannot mix BigInt and other typesМы должны явно их конвертировать: используя либо
BigInt(), либо Number(), например:let bigint = 1n;let number = 2;// конвертируем number в bigintalert(bigint + BigInt(number)); // 3// конвертируем `bigint` в numberalert(Number(bigint) + number); // 3Конвертирование
bigint в число всегда происходит неявно и без генерации ошибок, но если значение bigint слишком велико и не подходит под тип number, то дополнительные биты будут отброшены, так что следует быть осторожными с такими преобразованиями.К
BigInt числам нельзя применить унарный оператор +Унарный оператор
+value является хорошо известным способом конвертировать произвольное значение value в число.Данный оператор не поддерживается при работе с
BigInt числами.let bigint = 1n;alert( +bigint ); // SyntaxError: Unexpected identifierОперации сравнения
Операции сравнения, такие как
<, >, работают с bigint и обычными числами как обычно:alert( 2n > 1n ); // truealert( 2n > 1 ); // trueПожалуйста, обратите внимание, что обычные и
bigint числа принадлежат к разным типам, они могут быть равны только при нестрогом сравнении ==:alert( 1 == 1n ); // truealert( 1 === 1n ); // falseЛогические операции
В
if или любом другом логическом операторе bigint число ведёт себя как обычное число.К примеру, в
if bigint 0n преобразуется в false, другие значения преобразуются в true:if (0n) { // никогда не выполнится}Логические операторы
||, && и другие также работают с bigint числами как с обычными числами:alert( 1n || 2 ); // 1alert( 0n || 2 ); // 2