IteratorIterator概念Iterator提供统一的接口机制,为各种数据结构提供统一的访问机制。定义一个Iterator就是给一个对象提供一个next()方法,每次调用next()都会返回一个result对象,它有两个属性,value代表当前值,done代表遍历是否结束。函数makeIterator(数组){让索引=0;return{next:function(){return(Array.length>index?{value:Array[index++]}:{done:true})}}}letiterator=makeIterator(['1','2'])控制台.log(迭代器.next());//{value:'1'}console.log(iterator.next());//{value:'2'}console.log(iterator.next());//{done:true}Iterator的作用:为各种数据结构提供统一方便的访问接口;使数据结构的成员按一定顺序排列;for...of消费ES6默认的Iterator接口提供了forof语句来遍历迭代器对象,我们使用上面创建的迭代器,使用forof语句遍历它:letiterator=makeIterator(['1','2'])for(letvalueofiterator){console.log(value);}//iteratorisnotiterable结果是一个错误说iteratorisnotiterable,这是为什么呢?ES6规定默认的Iterator接口部署在数据结构的Symbol.iterator属性中。如果数据结构具有Symbol.iterator属性,则可以遍历该数据结构。我们按如下方式转换自定义makeIterator:constMakeIterator=(Array)=>({[Symbol.iterator](){letindex=0;return{next(){letlength=Array.length;if(index
