2

私の理解の範囲内で、コード

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 パーサーのバグに遭遇しましたか? それとも(おそらく)私は怒っていますか?

4

1 に答える 1

1
for(var i in player.neededItems)
{
  debug(i+":");
  if(!player.hasItem(player.neededItems[i].type))
    itemsRemaining.push(player.neededItems[i]);
  debug(i+"<br />");
}
于 2012-08-01T17:05:59.823 に答える