2012-02-08 3 views
2

の誰かのためにおそらくスラムダンクjavascriptのが、このコードはそれがないように動作し、なぜ私にはわからない:のための...イテレータ謎

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

それはどのようにしている「ではない(「未定義の」警告します君は")。誰かが説明して気にしますか?

ありがとうございました。 キー、ない要素オーバー

+2

をFirebugのは、任意のヒントを与えていましたか? – Ben

答えて

9

for ... in反復します。したがってfor(obj in testObjects)objを意味し、この場合は0です(配列なので)。

あなたは

for (key in testObjects) { 
    alert(testObjects[key].HI) 
} 

を行うことができますしかし、これはないお勧めします。このようにすれば、誰かがメソッドをtestOjbectsまたはすべての配列に追加すると、そのメソッドに対しても反復処理が行われます。

+1

警告のためにありがとう、それは今日の悲惨から私を救った –

+0

Heh、私は誰かに役立ったと聞いて素晴らしいです:)。 –

0

testObjects変数は実際にはオブジェクトではなく配列です。したがって、明らかに "HI"キーの下には何もありません(また、JavaScriptの配列にfor…inループを使用することは想定されていません)。代わりに標準forまたはwhileループを使用してください。

ループコードをfor (obj in testObjects[0])に変更するか、変数定義をtestObjects = { "HI" : "how are you" }に変更してください。

あなたのプログラムは、オブジェクトの配列を期待していない場合、あなたはおそらく、このような2つの入れ子ループ、設定する必要があるでしょう:

for (var i=0, l=testObjects.length; i<l; i++) { 
    for (var key in testObjects[i]) { 
     // console.log(key + ' is ' + testObjects[i][key]) 
    } 
}