盡我的理解,代碼的Javascript「的(我在陣列)」設置我到最後一個索引
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 />");
}
- 調試(x)的僅僅是追加x到ID爲「調試」一個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解析器中的錯誤?或者(更可能)我會生氣嗎?
嘗試'變種i',沒有'var'關鍵字提前一個可變的,我相信它是隱式聲明的全局。您的程序中可能有其他一些「i」存在干擾。 – 2012-08-01 17:03:48
你不應該使用for-in迭代數組。因爲它不方便,但更糟的是它的表現非常緩慢。 – jAndy 2012-08-01 17:08:49
如果有人向數組原型添加額外方法(例如Prototype庫),並且不能保證按順序遍歷鍵,則使用for-in對數組進行迭代也會中斷。相反,使用數字for循環'for(var i = 0; i
hugomg
2012-08-01 17:11:15