JavaScript 能够准确表示的整数范围在-2^53
到2^53
之间(不含两个端点),超过这个范围,无法精确表示这个值
Math.pow(2,53) //9007199254740992,(计算立方,2的53次立方)
Math.pow(2,53)===Math.pow(2,53+1) //返回的结果为true,超过这个范围,所以出现误差,因为超过了2^53的次方.
ES6 引入了Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限
// 最大精准值 超过 2^53 无法精准计算 而且都是JavaScript能够精准表示的极限
Number.MAX_SAFE_INTEGER === Math.pow(2,53)-1 //返回 true
//Math.pow(2,53)-1 = 9007199254740991
Number.MAX_SAFE_INTEGER === 9007199254740991 //也是 true
//最小精准值 超过 -2^53 无法精准计算
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER //返回 true
//-(Math.pow(2,53)-1) === -9007199254740991
Number.MIN_SAFE_INTEGER === -9007199254740991 //true