Javascript array.length属性

时间:2014-12-17 21:26:42

标签: javascript node.js

我正在通过这个名字很棒的learnyounode工作。 #9是“JUGGLING ASYNC”,指令是将3个URL作为参数并以参数顺序输出内容。我通过包括一个计数器让它工作,但我原来的不起作用:

var http = require('http'),
  bl = require('bl'),
  store = [],
  count = 0; //added later

process.argv.forEach(function(element, index, array) {
  if (index > 1) {
    http.get(element, function(response) {
      response.pipe(bl(function(err, data) {
        store[index] = data.toString();
        count++; //added later
        if (store.length == 3) {
            store.forEach(function(e,is,a) {
                console.log(e);
            });
        }
      }));
    });
  }
});

现在,如果你将store.length替换为第12行的count,那么事情就可以了。我只是无法弄清楚为什么数组上的.length还不够。 有人知道吗?

2 个答案:

答案 0 :(得分:4)

在javascript数组中,当你给一个空数组一个索引为5的项时,它意味着该数组长度为6项,未定义项0-4。

例如

var x = [];
console.log(x.length); //prints 0;
x[2] = "hello, world";
console.log(x.length); //prints 3;

您正在跳过前两个元素,但仍使用index,因此当您将第一个元素输入store时,您将其输入store[2],使长度为3 ,count仅为1时。

答案 1 :(得分:0)

您应该使用count变量,因为:

例如,当您执行store[1] = data.toString();时,会得到一个长度为2的数组[undefined, 1]。并且您希望它为1。