ES6-循環

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字符來進行遍歷spa

  • 它一樣支持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()方法:prototype

    // 向控制檯輸出對象的可枚舉屬性
    for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }

     

  • 想讓jQuery對象也支持for-of循環,
    jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
相關文章
相關標籤/搜索