Iterator接口的目的是 为所有的数据结构提供统一的访问机制(for of 循环)
数据结构只要部署了Iterator接口,就认为这种数据结构为“可遍历”的
一个数据结构只要具有Symbol.iterator属性,就认为是“可遍历”的。调用Symbol.iterator方法,就会得到当前数据结构默认的遍历器生成函数
const obj = {
[Symbol.iterator]:function(){ //Symbol.iterator 要放在【】当中
return {
next:function(){
return {
value:1,
done:true
}
}
}
}
}
原生具备Iterator接口的数据结构(只要使用的时候调用一下就好):
- Array
- Map
- Set
- String
- TypedArray
- 函数的arguments对象
- NodeList对象
对象是没有原生的Iterator接口的 ,因此需要部署Symbol.iterator属性 ,使数据结构具有遍历器接口
(对象没有默认部署Iterator接口,是因为对象属性对的遍历先后顺序是不确定的,需要开发者手动遍历)
let arr = ['a','b','c'];
let iter = arr[Symbol.iterator](); 调用Symbol.iterator属性
iter.next() //{value:'a',done:false}
iter.next() //{value:'b',done:false}
iter.next() //{value:'c',done:false}
iter.next() //{value:undefined,done:true}