为什么Javascript数组索引最多为4294967294而不是4294967295?

时间:2012-10-07 05:43:33

标签: javascript

Javascript的索引是32位,因此似乎数组索引应该能够达到4294967295,共计4294967296个元素。但实际上最高的索引是4294967294.由于数组具有length属性,我没有看到将null作为最后一个元素的原因。有没有理由最大指数是4294967294而不是4294967295?

3 个答案:

答案 0 :(得分:13)

这是因为当您使用Array构造函数创建数组时,您可以为它提供一个可选的length,如下所示:

new Array(length);

数组的length是32位无符号整数。因此,数组的长度可以从0Math.pow(2, 32) - 14294967295

对于长度为n的数组,索引范围从0n - 1。因此,JavaScript数组的最大索引为(Math.pow(2, 32) - 1) - 1Math.pow(2, 32) - 2,即4294967294

因此,JavaScript数组最多可包含4294967295个元素,而不包含4294967296元素。

我知道。这是非常不合逻辑的,但是再一个元素不会产生很大的不同。

答案 1 :(得分:4)

ECMA-262 specification(第15.4节)说:

  

当且仅当ToString(ToUint32( P ))等于​​ P (以String值的形式)是一个数组索引> P 和ToUint32( P )不等于2 32 -1。

规范还说数组的length属性始终小于 2 32 。这似乎将4294967295排除为数组索引。

答案 2 :(得分:0)

javascript数组可以容纳2^32-1=4294967295 但是数组索引从0开始,这就是为什么,4294967295-1=4294967294