javascript for ... in iterator mystery

Big*_*ird 2 javascript

可能是某人的扣篮,但我不知道为什么这段代码的行为方式如下:

testObjects = [ { "HI" : "how are you" } ];
for (obj in testObjects) { alert(obj.HI); }
Run Code Online (Sandbox Code Playgroud)

它警告'未定义'(不是"你好吗").有人会介意解释吗?

谢谢.

Tik*_*vis 9

for... in迭代,而不是元素.所以for(obj in testObjects)means obj是键,在这种情况下是0(因为它是一个数组).

你可以做到

for (key in testObjects) {
  alert(testObjects[key].HI)
}
Run Code Online (Sandbox Code Playgroud)

但是,这不是一个好习惯.如果你这样做,并且有人testOjbects向所有数组添加方法,它也将迭代该方法.