JavaScript 的索引是 32 位的,所以看起来数组索引应该能够达到 4294967295,总共 4294967296 个元素。但实际上最高索引是 4294967294。由于数组具有length
属性,所以我看不出将 null 作为最后一个元素的原因。最大索引是 4294967294 但不是 4294967295 是否有原因?
问问题
2112 次
3 回答
14
这是因为当您使用构造函数创建数组时,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
元素。
我知道。这很不合逻辑,但是再一次,一个元素不会有太大的不同。
于 2012-10-07T05:57:51.370 回答
5
ECMA-262 规范(第15.4 节)说:
当且仅当 ToString(ToUint32( P )) 等于P且 ToUint32( P ) 不等于 2 32 -1时,属性名称P(以字符串值的形式)是数组索引。
规范还说length
数组的属性总是小于2 32。这似乎将 4294967295 作为数组索引排除在外。
于 2012-10-07T06:11:33.653 回答
0
javascript 数组可以容纳2^32-1=4294967295
.
但是数组索引从那开始0
,4294967295-1=4294967294
于 2012-10-07T05:48:31.417 回答