[英]Wrong representation of JavaScript Array Length
如果我在JavaScript中有一个数组,请说:
var a = [1, 2, 3];
var b = ["Praveen", "Kumar", "Stack", "Overflow"];
如果我得到上述数组的长度:
a.length;
b.length;
我得到了正确的值。 即
a.length; // 3
b.length; // 4
但是,如果我创建另一个数组,我将索引设置为:
c = [];
c[5] = "Five";
c[10] = "Ten";
然后如果我查询长度,它会显示我11
。
c.length // 11
这是错的吗? 或者这样JavaScript解释数组? 请指导。
.length
被定义为大于最大数字索引的值。 (它不仅仅是“数字”;它是32位整数值,但基本上是编号属性。)
相反, 将 .length
属性设置为某个数值(例如,示例中为6
)会删除属性名称大于或等于您设置的值的属性。
的效果
var c = [];
c[10] = "foo";
是c
将如下所示:
c[0] === undefined
c[1] === undefined
c[2] === undefined
c[3] === undefined
c[4] === undefined
c[5] === undefined
c[6] === undefined
c[7] === undefined
c[8] === undefined
c[9] === undefined
c[10] === "foo"
具有元素0到10,因此数组的长度为11。
这是正确的。 长度取决于使用的最高索引,而不是数组中实际项目的数量。
像这样创建一个数组:
c = [];
c[5] = "Five";
c[10] = "Ten";
具有与此完全相同的效果:
c = [,,,,,"Five",,,,,"Ten"];
虽然数组只有两个项目,但长度为11,因为使用的最高索引是10。
数组的字符串表示形式将是[undefined, undefined, undefined, undefined, undefined, "Five", undefined, undefined, undefined, undefined, "Ten"]
因为它使用长度并显示所有索引的值,直到。
如果循环数组中的属性,则只能获取实际项的索引:
for (n in c) console.log(n);
输出:
5
10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.