私の理解の範囲内で、コード
var a = new Array("a","b","c");
var out = "";
for(i in a)
out += i+":"+a[i]+"\n";
に着手する必要があります
0:a
1:b
2:c
右?
私のプロジェクトには、次のコード スニペットがあります。
for(i in player.neededItems)
{
debug(i+":");
if(!player.hasItem(player.neededItems[i].type))
itemsRemaining.push(player.neededItems[i]);
debug(i+"<br />");
}
- debug(x) は、id "debug" を持つ div の内容に x を追加する単純な関数です。
- player.neededItems はオブジェクトの配列です。
- itemsRemaining は以前は空の配列です。
- player.hasItem は、プレイヤーがアイテムを持っているかどうかを返します。
Ok。ここが変なところです。for ループでは、「i」は配列へのインデックスとしてのみ使用されます。いかなる方法でも変更されません。ただし、「デバッグ」の出力は次のとおりです。
0:3
1:3
2:3
3:3
なぜ「i」が変化するのか?! player.neededItems は、どの関数でも変更されません。何が起こっているのかわかりません。でも、切り替えたら
for(i in player.neededItems)
為に
for(i = 0; i < player.neededItems.length; i++)
すべてが機能します。
「for(i in a)」構文の機能に関する何かが欠けていますか? それとも、webKit の JavaScript パーサーのバグに遭遇しましたか? それとも(おそらく)私は怒っていますか?