javascript for..迭代器之谜

javascript for ... in iterator mystery

本文关键字:迭代器 for javascript      更新时间:2023-09-26

对某人来说可能是一个大灌篮,但我不知道为什么这个代码会这样:

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或所有数组添加了一个方法,它也会迭代该方法。

您的testObjects变量实际上是一个数组,而不是一个对象。因此,它显然在"HI"键下没有任何内容(此外,您不应该在JavaScript中为数组使用for…in循环;而应该使用常规的forwhile循环)。

将循环代码更改为: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])
   }
}