Iterator接口的目的就是为所有数据结构提供一种统一访问的机制,用for...of实现。
一个数据结构只要有Symbol.iterator属性,就可以认为是“可遍历的”
原型部署了Iterator接口的数据结构有三种,具体包含四种,分别是数组,类似数组的对象,Set和Map结构。
为什么对象(Object)没有部署Iterator接口呢?
有两个原因:一是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。然而遍历遍历器是一种线性处理,对于非线性的数据结构,部署遍历器接口,就等于要部署一种线性转换。二是对对象部署Iterator接口并不是很必要,因为Map弥补了它的缺陷,又正好有Iteraotr接口。
然后就会有人问了,既然有Map了,为什么还要尝试给对象部署Iterator接口呢?
答案很多啊,指不定哪天面试官就问了呢?指不定哪天你脑抽想用for...of来遍历对象了呢?又或者是遇到死板的不愿意兼容ES6规则的那个啥呢?就四这么任性!
//创建一个构造函数
function Obj(value){
this.value=value;
this.nnext=null;
}
Obj.prototype[Symbol.iterator]=function(){
var iterator={next