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) 只是一个将 x 附加到 id 为“debug”的 div 内容的函数。
  • player.neededItems 是一个对象数组。
  • itemsRemaining 是一个先前为空的数组。
  • player.hasItem 返回玩家是否有物品。

行。所以这就是奇怪的地方。在 for 循环中,'i' 仅用作数组的索引。它没有以任何方式修改。但是,“调试”中的输出如下:

0:3
1:3
2:3
3:3

为什么“我”变了?!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 回答