4 回答

TA貢獻1757條經驗 獲得超8個贊
您不應該使用for..in
迭代數組元素的原因有三個:
for..in
將循環遍歷數組對象的所有自己和繼承的屬性,而不是DontEnum
; 這意味著如果有人將屬性添加到特定的數組對象(有正當理由 - 我自己這樣做了)或更改了Array.prototype
(這在代碼中被認為是不好的做法,應該可以很好地與其他腳本一起工作),這些屬性將會也要迭代; 可以通過檢查來排除繼承的屬性hasOwnProperty()
,但這對于在數組對象本身中設置的屬性沒有幫助for..in
不保證保留元素排序它很慢,因為你必須遍歷數組對象及其整個原型鏈的所有屬性,并且仍然只獲取屬性的名稱,即獲取值,將需要額外的查找

TA貢獻1772條經驗 獲得超8個贊
因為...枚舉通過保存數組的對象,而不是數組本身。如果我向數組原型鏈添加一個函數,那么它也將被包含在內。即
Array.prototype.myOwnFunction = function() { alert(this); }
a = new Array();
a[0] = 'foo';
a[1] = 'bar';
for(x in a){
document.write(x + ' = ' + a[x]);
}
這將寫:
0 = foo
1 =吧
myOwnFunction = function(){alert(this); }
因為你永遠不能確定什么都不會被添加到原型鏈中,只需使用for循環來枚舉數組:
for(i=0,x=a.length;i<x;i++){
document.write(i + ' = ' + a[i]);
}
這將寫:
0 = foo
1 =吧
添加回答
舉報