如果我在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解释数组?请指导。
答案 0 :(得分:6)
.length
被定义为大于最大数字索引的值。 (它不只是"数字&#34 ;;它的32位整数值,但基本上是编号的属性。)
相反,将<{1}}属性设置为某个数值(例如,示例中为.length
)会删除属性名称大于的数字的属性或等于你设定的值。
答案 1 :(得分:3)
的影响
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。
答案 2 :(得分:2)
这是对的。长度取决于使用的最高索引,而不是数组中实际项目的数量。
创建这样的数组:
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