JavaScript数组长度问题

皮埃尔

我对以下内容有些迷惑:

当我对两个不同的数组进行console.log记录时,一个给出的是我的实际长度,而另一个没有。

第一个数组的输出,具有良好的长度:

[Object, Object, Object]
  0: Object
  1: Object
  2: Object
  length: 3
  __proto__: Array[0]

第二个输出,长度应为4,但实际上为0:

[A: Object, B: Object, C: Object, D: Object]
  A: Object
  B: Object
  C: Object
  D: Object
  length: 0
  __proto__: Array[0]

为什么我的第一个数组确实具有正确的长度,但是第二个数组却没有正确的长度?

编辑:这是生成以上输出的代码:

var links = [
  {source: "A", target: "B"},
  {source: "A", target: "C"},
  {source: "A", target: "D"}
];

var nodes = [];

// Compute the distinct nodes from the links.
links.forEach(function(link) {
  link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
  link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
});

console.log(links);
console.log(nodes);
凯文·鲍索克斯

第二条日志消息无法输出数组的长度,因为已将值分配给其属性(而不是索引),因为该数组的实际索引内没有对象,该length属性为0发生这种情况是因为数组不能包含非数字索引,例如A,B,C,D。

因此,当您执行时:

var arr= [];
arr["b"] = "test";

该代码实际上是将字符串文字测试分配给数组b属性,arr而不是索引。这是可能的,因为数组是Javascript中的对象,因此它们也可能具有属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章