ES6 迭代器和for of
阿新 • • 發佈:2020-09-04
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 }