也许有人扣篮,但我不知道为什么这段代码的行为方式是这样:它提醒“未定义”的JavaScript ...在迭代神秘
testObjects = [ { "HI" : "how are you" } ];
for (obj in testObjects) { alert(obj.HI); }
(不是“你怎么样您”)。有人会介意解释吗?
谢谢。
也许有人扣篮,但我不知道为什么这段代码的行为方式是这样:它提醒“未定义”的JavaScript ...在迭代神秘
testObjects = [ { "HI" : "how are you" } ];
for (obj in testObjects) { alert(obj.HI); }
(不是“你怎么样您”)。有人会介意解释吗?
谢谢。
for
... in
遍历键,不元素。所以for(obj in testObjects)
意味着obj
是关键,在这种情况下是0(因为它是一个数组)。
你可以做
for (key in testObjects) {
alert(testObjects[key].HI)
}
然而,这是不是一个好的做法。如果你这样做,有人增加一个方法到testOjbects
或所有数组,它也会迭代该方法。
非常感谢这个警告,它今天让我从痛苦中解脱出来 – 2012-05-14 09:33:40
嘿,很高兴听到我对某人有帮助:)。 – 2012-05-14 10:04:14
您的testObjects
变量实际上是一个数组,而不是一个对象。因此,它显然没有“HI”键下的任何东西(另外,您不应该在JavaScript中使用for…in
循环作为数组;而是使用常规for
或while
循环代替)。
要么将您的循环代码更改为:for (obj in testObjects[0])
,要么将变量定义更改为此testObjects = { "HI" : "how are you" }
。
如果你的程序确实希望对象的数组,你需要设置两个嵌套循环,大概是这个样子:
for (var i=0, l=testObjects.length; i<l; i++) {
for (var key in testObjects[i]) {
// console.log(key + ' is ' + testObjects[i][key])
}
}
萤火虫没有给出任何提示? – Ben 2012-02-08 04:23:59