我有些困惑:
我有一个像这样的命令列表:
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
答案 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"]);
}