为什么JavaScript的数组的最大索引是4294967294而不是4294967295?

时间:2017-06-29 15:03:35

标签: javascript

我正在学习JavaScript,最近遇到了关于JavaScript数组的问题。

JavaScript数组的数字索引被描述为32位,我认为它的最大索引是32的幂减去1,但右边是2的32减去2的幂。 我不知道为什么?有人能告诉我吗?

2 个答案:

答案 0 :(得分:1)

发布此信息表明您对最大INDEX为4294967294是正确的,因为它是最大LENGTH -1且最大LENGTH是2 32 -1

所以从0到4294967294你有4294967295个元素

所有JS数组都从0开始

new Array(4294967295)是您可以定义的最大数组,因为您需要将unsigned int传递给构造函数因此,您可以拥有的最大索引比该

少一个

  

MDN Array

     

<强> arrayLength

     

如果传递给Array构造函数的唯一参数是0到2之间的整数 32 -1(包含),则返回一个新的JavaScript数组,其 length 属性设置为该数字(注意:这意味着arrayLength空插槽的数组,而不是具有实际未定义值的插槽)。如果参数是任何其他数字,则抛出RangeError异常。

  

Wikipedia
  数字4,294,967,295,相当于十六进制值   FFFFFFFF是计算中32位无符号整数的最大值。因此,它是声明为无符号整数

的变量的最大值

var arr = new Array(4294967294);
arr[arr.length-1]="one but last";
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]); 
arr.push("Last");
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]); 
arr.push("One too far");
console.log("Length: "+arr.length,"Index = "+(arr.length-1)+": "+arr[arr.length-1]); 

答案 1 :(得分:0)

使用Array构造函数创建数组时,可以为其提供可选长度,如下所示:

数组的长度是32位无符号整数。数组的长度范围可以从0到Math.pow(2,32) - 1,即4294967295。