这是由语言定义的吗?有确定的最大值吗?在不同的浏览器中是否有所不同?


当前回答

253 == 9 007 199 254 740 992。这是因为数字存储为52位尾数中的浮点数。

最小值为-253。

这使得一些有趣的事情发生了

Math.pow(2, 53) == Math.pow(2, 53) + 1
>> true

也可能是危险的:)

var MAX_INT = Math.pow(2, 53); // 9 007 199 254 740 992
for (var i = MAX_INT; i < MAX_INT + 2; ++i) {
    // infinite loop
}

进一步阅读:http://blog.vjeux.com/2010/javascript/javascript-max_int-number-limits.html

其他回答

火狐3似乎不存在庞大数字的问题。

1e+200 * 1e+100将计算到1e+300。

Safari似乎也没有问题。(顺便说一句,如果有人想测试的话,这是在Mac上进行的。)

除非我脑子进水了,否则这比64位整数大得多。

简短的回答是“视情况而定。”

如果你在任何地方使用位操作符(或者如果你引用数组的长度),范围是:

无符号:0…(1 > > > 0)

签名:(-(1 > > > 1)1)……(1 > > > 1)

(恰巧按位操作符和数组的最大长度被限制为32位整数。)

如果你不使用位操作符或使用数组长度:

签名:(-Math pow (2.53)) ... + Math . pow (2.53))

这些限制是由“Number”类型的内部表示施加的,通常对应于IEEE 754双精度浮点表示。(请注意,与典型的有符号整数不同,由于内部表示的特征,负极限的大小与正极限的大小相同,它实际上包括一个负0!)

在JavaScript中,数字的表示是2^53 - 1。

然而,按位操作是在32位(4个字节)上计算的,这意味着如果你超过32位移位,你将开始丢失位。

在谷歌Chrome内置javascript,你可以去大约2^1024之前的数字被称为无穷大。

其他人可能已经给出了一般的答案,但我认为给出一个快速确定它的方法会是一个好主意:

for (var x = 2; x + 1 !== x; x *= 2);
console.log(x);

这给了我9007199254740992在Chrome 30不到一毫秒。

它将测试2的幂,以找出当“加”1时,哪一个等于他自己。