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 }