Javascript数组.length属性

Javascript数组.length属性,javascript,node.js,Javascript,Node.js,我正在通过一个名为learnyounode的网站工作#9是“杂耍异步”,指令是将3个URL作为参数,并按参数顺序输出内容。我通过包括一个计数器使其工作,但我的原稿不起作用: var http = require('http'), bl = require('bl'), store = [], count = 0; //added later process.argv.forEach(function(element, index, array) { if (index >

我正在通过一个名为learnyounode的网站工作#9是“杂耍异步”,指令是将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);
            });
        }
      }));
    });
  }
});
现在,如果在第12行将store.length替换为count,事情就可以正常工作了,我就是不明白为什么数组中的.length不够。
有人知道吗?

在javascript数组中,当您在索引5处为空数组指定一个项时,这意味着该数组有6个项长,其中0-4项未定义

比如说

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

您跳过了前两个元素,但仍然使用
索引
,因此当您将第一个元素输入
存储
,您将其输入
存储[2]
,使长度为3,此时
计数
仅为1。

在javascript数组中,当您在索引5处为空数组提供一个项时,这意味着数组的长度为6项,其中0-4项未定义

比如说

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

您跳过了前两个元素,但仍然使用
索引
,因此当您将第一个元素输入
存储
时,您将其输入
存储[2]
,使长度为3,此时
计数
仅为1。

您应该使用
计数
变量,因为:


当您执行
存储[1]=data.toString()时[undefined,1]
。您希望它是1。

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



当您执行
存储[1]=data.toString()时[undefined,1]
。您希望它是1。

我确认是for循环而不是process。argv.forEach将保存2个循环。我无法说出您的问题是什么。你最初的代码是什么,你期望什么,你得到了什么?我完全不知道你在问什么。
store.length
会给出奇怪的回答;索引在
forEach
循环中应保持一致。尝试索引…我确认是for循环而不是process.argv.forEach会保存2个循环。我无法说出您的问题是什么。你最初的代码是什么,你期望什么,你得到了什么?我完全不知道你在问什么。
store.length
会给出奇怪的回答;索引在
forEach
循环中应保持一致。试试索引…不。说明很清楚:按参数顺序输出结果。如果
将其推到数组末尾,则顺序不确定。@Bergi,它是数组,不是对象。数组始终保持顺序。常规对象-不要。@Bergi,或者如果我弄错了,请你给我一个链接,我可以在那里读到它。我不是说数组忘记了顺序,我是说你以可能错误的顺序添加了它们。请注意,
http.get
bl
是异步的。说明很清楚:按参数顺序输出结果。如果
将其推到数组末尾,则顺序不确定。@Bergi,它是数组,不是对象。数组始终保持顺序。常规对象-不要。@Bergi,或者如果我弄错了,请你给我一个链接,我可以在那里读到它。我不是说数组忘记了顺序,我是说你以可能错误的顺序添加了它们。注意
http.get
bl
是异步的。啊,这让我很惊讶。。。(但也许不应该)
var x=[];x[“a”]=1;console.log(x.length);//打印0
是的,javascript对对象的解释非常松散。前几天我只是在循环中使用了一些东西,比如
x[otherArray.indexOf(item)]=item
。如果它在另一个数组中找不到它,它将进入-1,它不计入
长度,因此基本上会被忽略;x['a']='a';console.log(x);//产生[a:'a']console.log(x.length)//同样,0 x[1]=1;console.log(x);//产生[1,a:'a']console.log(x.length);//对于空的0位和1位产生2
…无论如何,我觉得这很有趣。这几乎就像这些alpha索引数组项实际上是对象项,因此不会被计算在内。这可能是一种愚蠢的想法……Mozilla开发者网络(MDN)有一些关于javascript和HTML的非常棒的文档。这可能会有助于阅读(还有一个特定的章节介绍)。A
[]
实际上是一个简单的对象,它是数组类的一个实例。啊,这让我很惊讶。。。(但也许不应该)
var x=[];x[“a”]=1;console.log(x.length);//打印0
是的,javascript对对象的解释非常松散。前几天我只是在循环中使用了一些东西,比如
x[otherArray.indexOf(item)]=item
。如果它在另一个数组中找不到它,它将进入-1,它不计入
长度,因此基本上会被忽略;x['a']='a';console.log(x);//产生[a:'a']console.log(x.length)//同样,0 x[1]=1;console.log(x);//产生[1,a:'a']console.log(x.length);//对于空的0位和1位产生2
…无论如何,我觉得这很有趣。这几乎就像这些alpha索引数组项实际上是对象项,因此不会被计算在内。这可能是一种愚蠢的想法……Mozilla开发者网络(MDN)有一些关于javascript和HTML的非常棒的文档。这可能会有助于阅读(还有一个特定的章节介绍)。实际上,
[]
是一个简单的对象,它是数组类的一个实例。