2011-02-22 38 views
0
this.someArray = [1,2,3,4,5] 
for(var i in this.someArray){console.log(this.someArray[i]);} 

它不僅遍歷數組元素,而且還像'remove'一樣垃圾。我不想放棄增強的循環並使用常規循環(因爲它不方便)。有沒有辦法只循環數組內容?如何使增強的for循環僅查看實際的數組內容

+0

不應該是'console.log(i)'反正嗎? – Dutchie432 2011-02-22 21:22:06

+0

是...良好趕上 – ppecher 2011-02-22 21:24:19

回答

2

你的循環捕捉甲基除了數組的內容外,還有Array.prototype的ods和屬性。就像JCOC611所說的那樣,通常最好是通過「正確」方式遍歷數組,但如果你不想這樣做,你可以使用數組的hasOwnProperty函數來檢查一個屬性是否真的在數組中,或者它是否的Array.prototype部分:

this.someArray = [1, 2, 3, 4, 5]; 
for (var i in this.someArray) { 
    if (this.someArray.hasOwnProperty(i)) { 
     console.log(this.someArray[i]); 
    } 
} 

詳情請參見這個問題:Why is using "for...in" with array iteration a bad idea?

而且,這個博客帖子有很多的信息:http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/

2

決不遍歷像一個數組,這樣做:

for(var i=0;i<this.someArray.length;i++){...} 

「我不想放棄增強循環和使用常規循環(因爲它是不方便)」

對不起,但據我所知,這是正確的方式通過數組循環...

+0

+1使用粗體。這是一個需要聽取的重要聲明。 – Phrogz 2011-02-22 21:53:48

2

對於數組,使用老式的for循環有索引可能是明智的做法,特別是從喲開始你經常需要知道指數是什麼。顯示了通過任何物體的屬性循環時

然而,爲了避免繼承屬性,你可以使用hasOwnProperty功能:

for (var prop in someObject){ 
    if (someObject.hasOwnProperty(prop) { 
     console.log(someObject[prop]); 
    } 
} 
0

你也有Ext.each它可以是很有用的。

Ext.each(myArray, console.log);