の誰かのためにおそらくスラムダンク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
またはすべての配列に追加すると、そのメソッドに対しても反復処理が行われます。
警告のためにありがとう、それは今日の悲惨から私を救った –
Heh、私は誰かに役立ったと聞いて素晴らしいです:)。 –
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])
}
}
をFirebugのは、任意のヒントを与えていましたか? – Ben