据我了解,代码
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 解析器中的一个错误?或者(更有可能)我要疯了?