Javascript 对象中的长度返回奇怪的值

Javascript 对象中的长度返回奇怪的值,javascript,Javascript,我有一个这样的数组,取自控制台: [1: 1, 31: 0] length: 32 这是一张从chrome控制台拍摄的图像 具有如下数组: var array = ["foo", "bar", "foobar"] 使用长度,得到正确的答案:3 console.log(array.length); // returns 3 谁能告诉我,为什么长度是32?我检查了几个SO问题,我知道,对于我想要的值,我需要: var i=Object.keysfragenStatusArray.length;

我有一个这样的数组,取自控制台:

[1: 1, 31: 0]
length: 32
这是一张从chrome控制台拍摄的图像

具有如下数组:

var array = ["foo", "bar", "foobar"]
使用长度,得到正确的答案:3

console.log(array.length); // returns 3
谁能告诉我,为什么长度是32?我检查了几个SO问题,我知道,对于我想要的值,我需要:

var i=Object.keysfragenStatusArray.length;//返回2

但我还是不明白为什么长度是32。长度不是在计算元素吗?它只是取最高的数值指数,然后加上前一个指数吗?检查时,两者都属于对象类型。

数组的长度比最高的数组索引属性名高一个

因为您有一个属性31,所以长度是32

最重要的是:

数组对象对某类属性给予特殊处理 名字。字符串值形式的属性名P是数组 索引当且仅当ToStringToUint32P等于P且 ToUint32P不等于232−1.属性名为的属性 数组索引也称为元素

因此,如果属性名是一个数字,那么它就是一个数组索引

每个数组对象都有一个 长度属性,其值始终为小于的非负整数 232length属性的值在数字上大于名称为数组索引的每个属性的名称

将1添加到最大的数组索引以获得长度

每当 创建或更改数组对象的属性,以及其他属性 根据需要进行调整以保持此不变。明确地 每当添加名称为数组索引的属性时,长度 属性(如有必要)更改为比数值 该数组索引的值;当长度属性为 已更改,名称为数组索引且值为的每个属性 不小于新长度的将自动删除。这 约束仅应用于阵列对象的自身属性,并且是 不受可能继承的长度或数组索引属性的影响 从它的原型

只要需要保持正确,长度就会改变。

数组的长度比最高的数组索引属性名高一个

因为您有一个属性31,所以长度是32

最重要的是:

数组对象对某类属性给予特殊处理 名字。字符串值形式的属性名P是数组 索引当且仅当ToStringToUint32P等于P且 ToUint32P不等于232−1.属性名为的属性 数组索引也称为元素

因此,如果属性名是一个数字,那么它就是一个数组索引

每个数组对象都有一个 长度属性,其值始终为小于的非负整数 232length属性的值在数字上大于名称为数组索引的每个属性的名称

将1添加到最大的数组索引以获得长度

每当 创建或更改数组对象的属性,以及其他属性 根据需要进行调整以保持此不变。明确地 每当添加名称为数组索引的属性时,长度 属性(如有必要)更改为比数值 该数组索引的值;当长度属性为 已更改,名称为数组索引且值为的每个属性 不小于新长度的将自动删除。这 约束仅应用于阵列对象的自身属性,并且是 不受可能继承的长度或数组索引属性的影响 从它的原型


只要需要,长度就会改变。

因此,如果我有一个数组,如5、10和15,我的数组大小将是16?@DasSaffe-你不能有两个同名的属性。sry的意思是:5、10、15,那么长度将是16。谢谢你的澄清。我会尽快接受答案。一定是监督了,抱歉。所以,如果我有一个像5、10和15这样的数组,我的数组大小将是16?@DasSaffe-你不能有两个同名的属性。sry的意思是:5、10、15,那么长度将是16。谢谢你澄清这一点。我会尽快接受答案。必须对此进行监督,抱歉。请记住,您的代码相当于var ari=new Array32;ary[1]=1;ary[31]=0;它与var ari=[null,1,0]不同;这可能是长度3,也可能是您想要的;ary[1]=1;ary[31]=0;它与var ari=[null,1,0]不同;长度是3,也许是你想要的。