【问题标题】:Wrong representation of JavaScript Array LengthJavaScript 数组长度的错误表示
【发布时间】:2015-03-26 13:59:19
【问题描述】:

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

【问题讨论】:

  • c[10] 是将这个值添加到位置 10。数组从 0 到它们的长度,这意味着该数组的长度为 11。
  • 如果你认为,长度应该是两个然后this is the answer,否则下面说的很尖锐
  • 如果你想获取数组中设置项的数量,你可以有点滥用Object.keysObject.keys(c).length 将返回 2。
  • @NoDownvotesPlz 感谢您的指点。 ps:不错的用户名。
  • @ScottKaye Lemme 退房。 :D

标签: javascript arrays


【解决方案1】:

.length 被定义为比最大数字索引的值大一。 (它不仅仅是“数字”;它是 32 位整数值,但基本上是编号属性。)

相反,设置 .length 属性为某个数值(例如,在您的示例中为 6)具有删除属性名称大于或等于您设置的值。

【讨论】:

  • 我不知道这是否会成为答案,但是是的,很多人都投票给了你,包括我。所以我会接受这个! :D
  • @NoDownvotesPlz 但是请检查任何编程语言,让它是 Java、PHP 或其他任何语言。它显示了数组中的项目数,与lastIndex + 1相反,对吧?如果我是正确的,应该是这样吗?
  • c[10] 简单的意思是,有 0 到 10 个元素,即数组中有 11 个元素,所有语言都这样
  • @PraveenKumar 数组索引从0开始,所以c[10]成为第11个元素..简单计数
  • @PraveenKumar:JavaScript 数组没有错,数组实现只是与大多数语言不同。具有动态数组的语言通常不允许您在数组中的任何位置分配项目,您需要首先确保数组足够大。调整数组大小通常会创建所有项目来填充数组,而 Javascript 数组只包含您放入其中的实际项目。
【解决方案2】:

效果

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。

【讨论】:

  • JavaScript 经常出错。有关详细列表,请参阅 Douglas Crockford 的优秀书籍“JavaScript: The Good Parts”。
【解决方案3】:

没错。长度取决于使用的最高索引,而不是数组中实际项的数量。

像这样创建一个数组:

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

【讨论】:

  • 是的,我看到了! :D 在 Chrome 控制台中,它显示了 undefined x 4undefined x 5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
相关资源
最近更新 更多