1. 程式人生 > 實用技巧 >ES6 迭代器和for of

ES6 迭代器和for of

for of遍歷

for (let 形參 of 陣列){ //...形參一般用item代表每一項 }
  • 用法簡單
  • 可跳出迴圈 continue break
  • 沒有索引值
    • for (let index of arr.keys()) {} 可獲取索引
  • forEach()
    • 用法簡單
    • 不可跳出迴圈
    • 有索引值
    • arr.forEach(function (valve, index) {//... })
  • for(){}
    • 可以跳出迴圈
    • 可以拿到索引
    • 但是書寫麻煩
  • for in
    • 可以跳出迴圈
    • 可以拿到索引
    • 但是書寫麻煩
    • 一般是用於遍歷物件的,拿到索引是字串,還需要轉成數字

iterator遍歷器(迭代器)

陣列預設實現了迭代器,所以可以通過for of遍歷 Array[Symbol.iterator] 對應是一個函式,這個函式返回一個物件,物件中有個next方法,next方法返回一個物件 {value:"",done:false}
  • value 這一項的值
  • done 是否遍歷結束,true代表結束了


物件沒有實現迭代器,所以不能通過for of 遍歷

可以通過模擬實現

 1 var Obj = {
 2         'name': 'Hjcby',
 3         'age': '22',
 4         'trait': 'handsome'
 5
} 6 Obj[Symbol.iterator] = function () { 7 let index = 0; 8 let keys = Object.keys(this); 9 return { 10 next: () => { 11 let value = { 12 key: keys[index], 13 value: this[keys[index]] 14 }
15 let done = keys[index] == this.length; 16 index++; 17 return { 18 value, 19 done 20 } 21 } 22 } 23 } 24 for (let v of Obj) { 25 console.log(v); 26 }