我在处理 JavaScript 数字时发现了以下奇怪的行为。
var baseNum = Math.pow(2, 53);
console.log(baseNum); //prints 9007199254740992
console.log(baseNum + 1); //prints 9007199254740992 again!
console.log(baseNum + 2); //prints 9007199254740994, 2 more than +1
console.log(baseNum + 3) // prints 9007199254740996, 2 more than +2
console.log(baseNum + 4) // prints 9007199254740996, same as +3
这里发生了什么?我知道 JavaScript 只能表示数字2^53
(它们在内部是“双”?),但为什么会出现这种行为?
如果2^53
是实际最大值,那么为什么我们有Number.MAX_VALUE
( 1.7976931348623157e+308
)?