forEach 方法來遍歷數組,不能使用break語句中斷循環,也不能使用return語句返回到外層函數
myArray.forEach(function (value) {
console.log(value);
});
for-in 循環,不建議用在數組遍歷中
- 在這段代碼中,賦給index的值不是實際的數字,而是字符串“0”、“1”、“2”,此時很可能在無意之間進行字符串算數計算,例如:“2” + 1 == “21”,這給編碼過程帶來極大的不便。
- 作用於數組的for-in循環體除了遍歷數組元素外,還會遍歷自定義屬性。舉個例子,如果你的數組中有一個可枚舉屬性myArray.name,循環將額外執行一次,遍歷到名為“name”的索引。就連數組原型鏈上的屬性都能被訪問到。
- 最讓人震驚的是,在某些情況下,這段代碼可能按照隨機順序遍歷數組元素。
- 簡而言之,for-in是為普通對象設計的,你可以遍歷得到字符串類型的鍵,因此不適用於數組遍歷。
-
for (var index in myArray) { // 千萬別這樣做 console.log(myArray[index]); }
for-of
for (var value of myArray) { console.log(value); }
- 這是最簡潔、最直接的遍歷數組元素的語法
- 這個方法避開了for-in循環的所有缺陷
- 與forEach()不同的是,它可以正確響應break、continue和return語句
-
for-of循環不僅支持數組,還支持大多數類數組對象,例如DOM NodeList對象。
-
for-of循環也支持字符串遍歷,它將字符串視為一系列的Unicode字符來進行遍歷
- 它同樣支持Map和Set對象遍歷。
Set對象可以自動排除重復項: var uniqueWords = new Set(words); for (var word of uniqueWords) { console.log(word); }
Map對象稍有不同:內含的數據由鍵值對組成,所以你需要使用解構(destructuring)來將鍵值對拆解為兩個獨立的變量: for (var [key, value] of phoneBookMap) { console.log(key + "'s phone number is: " + value); }
-
for-of循環不支持普通對象,但如果你想迭代一個對象的屬性,你可以用for-in循環(這也是它的本職工作)或內建的Object.keys()方法:
// 向控制台輸出對象的可枚舉屬性 for (var key of Object.keys(someObject)) { console.log(key + ": " + someObject[key]); }
-
想讓jQuery對象也支持for-of循環, jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
