JavaScript数组长度的错误表示

时间:2015-03-26 13:59:20

标签: javascript arrays

如果我在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解释数组?请指导。

3 个答案:

答案 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