BigInt: целые числа за пределами безопасного Number
BigInt представляет целые числа произвольной поддерживаемой реализацией величины без обычного ограничения точности целых Number.
Назначение
BigInt представляет целые числа произвольной поддерживаемой реализацией величины без обычного ограничения точности целых Number.
Как это работает
Литерал заканчивается буквой n. Арифметика требует согласованных типов: обычное сложение BigInt и Number запрещено. Деление целых BigInt отбрасывает дробную часть.
Пример
const value=9007199254740993n;
console.assert(value+1n===9007199254740994n);
console.assert(7n/2n===3n);
console.assert(String(value)==="9007199254740993");
let failed=false;try{JSON.stringify({value});}catch(error){failed=error instanceof TypeError;}
console.assert(failed);
Что должно получиться
Большое целое сохраняется точно, деление даёт целую часть, а обычная JSON-сериализация отклоняет BigInt. Строковое представление — один из вариантов передачи при явно согласованной схеме.
Граница применения и частая ошибка
Не переводите уже неточное большое Number в BigInt, ожидая восстановления потерянных цифр. Читайте точное целое из строки или литерала; JSON.stringify требует отдельной политики для BigInt.
Самостоятельная проверка
Сложите единицу с целым больше безопасного диапазона Number. Затем проверьте деление 7n на 2n и явно определите формат сериализации результата для API.
JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.