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     }
原文地址:https://www.cnblogs.com/hjcby/p/13612581.html