ES6之Number

Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER 常量表示在 JavaScript 中最大的安全整数(maxinum safe integer)(2^53 - 1)

console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
console.log(Math.pow(2,53) - 1); //9007199254740991

Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER 代表在 JavaScript 中最小的安全的integer型数字 (-(2^53 - 1)).

console.log(Number.MIN_SAFE_INTEGER); //-9007199254740991
console.log(-(Math.pow(2,53) - 1)); //-9007199254740991

2^53 是 js 内置的最大的整数值(不安全),2^53 + 1 会被舍入成 2^53:

Math.pow(2, 53) === Math.pow(2, 53) + 1; // true
Math.pow(2, 53) === Math.pow(2, 53) + 2; // false

Number.isSafeInteger()

Number.isSafeInteger() 方法用来判断传入的参数值是否是一个“安全整数”(safe integer)。

一个安全整数是一个符合下面条件的整数:

  • 可以准确地表示为一个IEEE-754双精度数字,
  • 其IEEE-754表示不能是舍入任何其他整数以适应IEEE-754表示的结果。

安全整数范围为 -(2^53 - 1)到 2^53 - 1 之间的整数,包含 -(2^53 - 1)和 2^53 - 1。

console.log(Number.isSafeInteger(3));                    // true
console.log(Number.isSafeInteger(Math.pow(2, 53)));      // false
console.log(Number.isSafeInteger(Math.pow(2, 53) - 1));  // true
console.log(Number.isSafeInteger(NaN));                  // false
console.log(Number.isSafeInteger(Infinity));             // false
console.log(Number.isSafeInteger("3"));                  // false
console.log(Number.isSafeInteger(3.1));                  // false
console.log(Number.isSafeInteger(3.0));                  // true

Polyfill

Number.isSafeInteger =
  Number.isSafeInteger ||
  function (value) {
    return (
      Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER
    );
  };