Javascript的索引是32位,因此似乎数组索引应该能够达到4294967295,共计4294967296个元素。但实际上最高的索引是4294967294.由于数组具有length
属性,我没有看到将null作为最后一个元素的原因。有没有理由最大指数是4294967294而不是4294967295?
答案 0 :(得分:13)
这是因为当您使用Array
构造函数创建数组时,您可以为它提供一个可选的length
,如下所示:
new Array(length);
数组的length
是32位无符号整数。因此,数组的长度可以从0
到Math.pow(2, 32) - 1
,4294967295
。
对于长度为n
的数组,索引范围从0
到n - 1
。因此,JavaScript数组的最大索引为(Math.pow(2, 32) - 1) - 1
或Math.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