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

  • 它同樣支持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];

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM