Не путайте Number.MAX_VALUE с максимальным точным значением. Все числа в javascript хранятся как 64-битные числа с плавающей запятой, что означает, что вы можете получить старшие (и младшие) числа, но они будут точны только до определенной точки.
Двойные числа с плавающей запятой (т. Е. Javascript) имеют 53 бита значимости и точности, что означает, что самое высокое / самое низкое «безусловно точное» целое число в javascript равно +/- 9007199254740992 (2 ^ 53). Числа выше / ниже, которые могут оказаться точными (те, которые просто добавляют 0 в конце, потому что биты экспоненты могут использоваться для представления этого).
Или, в словах ECMAScript: «Обратите внимание, что все положительные и отрицательные целые числа, величина которых не превышает 2 ^ 53, представимы в типе Number (действительно, целое число 0 имеет два представления: +0 и −0 ). "
Обновление
Просто чтобы добавить немного к существующему вопросу, спецификация ECMAScript требует, чтобы, если целое число имело менее 22 цифр, .toString()
выведет его в стандартном десятичном формате (например, 169808845126909100000
, как в вашем примере). Если он имеет 22 или более цифр, он будет выводиться в нормализованной научной нотации (например, 1698088451269091000000
- дополнительный 0 - выводится как 1.698088451269091e+21
).