Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript的最大索引是';s数组是4294967294,但不是4294967295?;_Javascript - Fatal编程技术网

为什么JavaScript的最大索引是';s数组是4294967294,但不是4294967295?;

为什么JavaScript的最大索引是';s数组是4294967294,但不是4294967295?;,javascript,Javascript,我正在学习JavaScript,最近遇到了一个关于JavaScript数组的问题 JavaScript数组的数字索引被描述为32位,我认为它的最大索引是2乘以32减1的幂,但右边是2乘以32减2的幂。 我不知道为什么?有人能告诉我吗 使用数组构造函数创建数组时,可以为其提供可选长度,如下所示: 数组的长度是32位无符号整数。数组的长度可能在0到Math.pow(2,32)-1之间,即4294967295。发布此消息以表明最大索引为4294967294是正确的,因为它是最大长度-1,最大长度为23

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

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

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


数组的长度是32位无符号整数。数组的长度可能在0到Math.pow(2,32)-1之间,即4294967295。

发布此消息以表明最大索引为4294967294是正确的,因为它是最大长度-1,最大长度为232-1

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

所有JS数组都从0开始

newarray(4294967295)
是您可以定义的最大数组,因为您需要将无符号int传递给构造函数,因此您可以拥有的最大索引比该索引小一个

阵列长度

如果传递给数组构造函数的唯一参数是一个介于0和232-1之间的整数(包括在内),这将返回一个新的JavaScript数组,其长度属性设置为该数字(注意:这意味着数组的数组长度为空插槽,而不是具有实际未定义值的插槽)。如果参数是任何其他数字,则会引发RangeError异常



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

var-arr=新阵列(4294967294);
arr[arr.length-1]=“一个但最后一个”;
console.log(“长度:“+arr.Length”,索引=“+(arr.Length-1)+”:“+arr[arr.Length-1]);
arr.push(“最后一次”);
console.log(“长度:“+arr.Length”,索引=“+(arr.Length-1)+”:“+arr[arr.Length-1]);
arr.push(“一个太远”);

console.log(“长度:“+arr.Length”,索引=“+(arr.Length-1)+”:“+arr[arr.Length-1])
您是如何确定数组的最大允许索引的?@dogui我尝试使用4294967295作为数组的数字索引,但是我发现当我用tostring方法输出它时,它会被当作字符串索引处理。所以我确定它的最大索引是4294967294,而不是4294967295,明确指出OP是错误的,这比仅仅引用一本手册(这本书读起来就是这样)要好得多。@deceze,在使它成为一个更清楚的答案的同时,它也会使它成为一个错误的答案。OP是对的。@4我更新了广播。你完全正确。我知道你的意思。但我不知道为什么数组只有4294967295个元素,32位无符号整数有4294967296个元素,从0到4294967295,为什么javascript的数组不能使用4294967295作为数字索引。我不明白。因为所有的JS数组都从0开始!我知道数组从0开始,但为什么不能使用4294967295作为索引?如果数组使用从0到4294967294的索引,它只有4294967295个元素。但是32位无符号整数有4294967296个元素,从0到4294967295。Javascript的数组可以使用0作为索引,为什么不能使用4294967295索引?4294967295是否正在以另一种方式使用?请参阅更新。这很简单。