for(... in ...)不使用数组

时间:2011-08-25 12:32:36

标签: javascript

我有些困惑:

我有一个像这样的命令列表:

var commands = [{"command": "read"}, {"command": "write"}, {"command": "login"}];

如果我尝试访问其中一个命令就可以了:

console.log(commands[0]["command"]); // Output is "read"
console.log(commands[0].command);    // Output is "read"

但如果我尝试这个输出总是未定义的:

for(command in commands)
    console.log(command["command"]); // undefined, undefined, undefined

6 个答案:

答案 0 :(得分:8)

for在javascript中执行数组迭代,因此您需要:

for(command in commands)
    console.log(commands[command]["command"]);

即,示例中的command变量是数组索引,而不是数组中的枚举项。

答案 1 :(得分:5)

for ... in构造迭代数组中对象的,而不是对象本身。所以你需要写:

for(index in commands)
    console.log(commands[index]["command"]);

答案 2 :(得分:2)

像这样使用

 for(var x in commands)
      console.log(commands[x].command);

答案 3 :(得分:2)

for (.. in ..)构造用于循环对象,而不是数组。由于你有一个对象数组,你应该这样做:

for (var i = 0, j = commands.length; i < j; i += 1) {
  console.log(commands[i].command);
}

要详细说明为什么要使用此for结构而不是for...in,请参阅answer #3010848

答案 4 :(得分:2)

为什么将for..in与数组一起使用?只需按索引访问,您还可以避免原型扩展的潜在问题(请参阅hasOwnProperty

var i,len=commands.length;

for (i=0;i<len;i++ ) {
    console.log commands[i].command
}

如果顺序无关紧要,则更简洁

for (i=commands.length-1;i>=0;i-- ) {

}

或者

var i=commands.length;
while (i--) {
   ...
}

答案 5 :(得分:1)

你试过了吗?

for(command in commands[0]) {
    console.log(command["command"]);
}