ECMAScript 6 Number.MAX_SAFE_INTEGER предположительно представляет максимальное числовое значение, которое JavaScript может хранить до возникновения проблем с точностью с плавающей запятой. Однако это требование, чтобы число 1, добавленное к этому значению, также должно быть представлено как Number.
Number.MAX_SAFE_INTEGERПРИМЕЧАНИЕ. Значение
Number.MAX_SAFE_INTEGERявляется наибольшим целым числомnтаким образом, чтоnиn + 1оба точно представляются как значениеNumber.Значение
Number.MAX_SAFE_INTEGERравно9007199254740991 (2^53−1).
Консоли JavaScript Chrome, Firefox, Opera и IE11 могут безопасно выполнять вычисления с номером 9,007,199,254,740,992. Некоторые тесты:
// Valid
Math.pow(2, 53) // 9007199254740992
9007199254740991 + 1 // 9007199254740992
9007199254740992 - 1 // 9007199254740991
9007199254740992 / 2 // 4503599627370496
4503599627370496 * 2 // 9007199254740992
parseInt('20000000000000', 16) // 9007199254740992
parseInt('80000000000', 32) // 9007199254740992
9007199254740992 - 9007199254740992 // 0
9007199254740992 == 9007199254740991 // false
9007199254740992 == 9007199254740992 // true
// Erroneous
9007199254740992 + 1 // 9007199254740992
9007199254740993 + "" // "9007199254740992"
9007199254740992 == 9007199254740993 // true
Почему требуется, чтобы n + 1 также представлялся как Number? Почему это не делает это опасным?