无法在Javascript数组中访问FOR ... IN

时间:2010-09-23 13:30:30

标签: javascript arrays

我想使用[]作为数组访问FOR...IN JSON文字中的对象。但是,遍历FOR...IN会给对象x undefined。请参阅下面的代码。

var myJSONObject = [
    {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
    {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
    {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
];

for (var x in myJSONObject) {
    alert(x['method']);
}

您可以在线测试代码@ JSBin

的问候,
穆奈姆

3 个答案:

答案 0 :(得分:5)

您不应使用for … in迭代数组:

  

虽然使用它可能很诱人   这是一种迭代过程的方法   数组,这是一个坏主意。该   for ... in语句迭代   除了用户定义的属性   数组元素,所以如果你修改   数组的非整数或   非正性质(例如   为它添加“foo”属性甚至是   通过添加方法或属性   Array.prototype),for ... in   声明将返回您的姓名   除了用户定义的属性   数字索引。还有,因为   迭代的顺序是任意的,   迭代数组可能无法访问   数字顺序的元素。就这样吧   更好地使用传统的for循环   迭代时使用数字索引   过阵列。

以这种方式循环遍历数组:

for (var i = 0, length = myJSONObject.length; i < length; i++) {
    alert(myJSONObject[i].method);
}

请参阅JSBin

答案 1 :(得分:1)

尝试

for (var x in myJSONObject) {
    alert( myJSONObject[x]['method'] );
}

答案 2 :(得分:0)

for ... in语法为您提供迭代对象的键,而不是值。因此,您必须执行以下操作:

for (var idx in myJSONObject) {
    alert(myJSONObject[idx]['method']);
}