无法访问Javascript数组中的…的

无法访问Javascript数组中的…的,javascript,arrays,Javascript,Arrays,我想使用中的FOR…以数组的形式访问[]JSON文本中的对象。但是在中对…进行迭代会得到对象x未定义的。请参阅下面的代码 var myJSONObject = [ {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, {"ircEvent": "PRIV

我想使用中的FOR…以数组的形式访问
[]
JSON文本中的对象。但是在中对…进行迭代会得到对象
x
未定义的
。请参阅下面的代码

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']);
}
您可以在此处在线测试代码@

问候,
穆尼姆

试试看

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


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

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

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

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

您不应使用以下命令迭代数组:

尽管它可能很吸引人 这是一种在 数组,这是个坏主意。这个 for…in语句在 用户定义的属性,以及 数组元素,因此如果修改 数组的非整数或 非正特性(例如 向其添加“foo”属性,甚至 通过将方法或属性添加到 数组。原型),用于…的 语句将返回您的 用户定义的属性,以及 数字索引。还因为 迭代的顺序是任意的, 在数组上迭代可能不会访问 按数字顺序排列的元素。事实就是这样 最好使用传统的for循环 迭代时使用数字索引 在阵列上

只需通过以下方式在阵列中循环:

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

请参阅。

您不应该使用以下命令在数组上迭代:

尽管它可能很吸引人 这是一种在 数组,这是个坏主意。这个 for…in语句在 用户定义的属性,以及 数组元素,因此如果修改 数组的非整数或 非正特性(例如 向其添加“foo”属性,甚至 通过将方法或属性添加到 数组。原型),用于…的 语句将返回您的 用户定义的属性,以及 数字索引。还因为 迭代的顺序是任意的, 在数组上迭代可能不会访问 按数字顺序排列的元素。事实就是这样 最好使用传统的for循环 迭代时使用数字索引 在阵列上

只需通过以下方式在阵列中循环:

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

请参阅。

这很有效!谢谢你能解释一下吗?我将
x
视为
undefined
以及
myJSONObject[x]
是如何工作的?不要在
中使用
for…来迭代数组:
x
在这种情况下,是一个标识符,而不是实际的元素。因此,在第一次迭代中,
x
将等于
0
。然而,正如Marcel所提到的,当迭代数组时,应该使用标准的
for
循环。每个人都会说,“for…in”对数字索引数组不利。我只是复制了您使用的示例并添加了更正。对于y中的x,x值表示包含的属性名称。在数组中,它主要是一个数字,在动态对象中,它可以是任何类型的基元(字符串、数字、布尔值等)。由于要查找与这些名称关联的值,因此可以通过数组表示法:y[x]查找这些值。值myJSONObject[x]具有方法属性。myJSONObject没有。这是有效的!谢谢你能解释一下吗?我将
x
视为
undefined
以及
myJSONObject[x]
是如何工作的?不要在
中使用
for…来迭代数组:
x
在这种情况下,是一个标识符,而不是实际的元素。因此,在第一次迭代中,
x
将等于
0
。然而,正如Marcel所提到的,当迭代数组时,应该使用标准的
for
循环。每个人都会说,“for…in”对数字索引数组不利。我只是复制了您使用的示例并添加了更正。对于y中的x,x值表示包含的属性名称。在数组中,它主要是一个数字,在动态对象中,它可以是任何类型的基元(字符串、数字、布尔值等)。由于要查找与这些名称关联的值,因此可以通过数组表示法:y[x]查找这些值。值myJSONObject[x]具有方法属性。myJSONObject没有。不要使用
for…in
来迭代数组:不要使用
for…in
来迭代数组:那不是JSON数组,而是Javascript数组:JSON只是一个符号(Javascript对象符号)。那不是JSON数组,而是Javascript数组:JSON只是一个符号(JavaScript对象表示法)。