ES6新的数组方法、集合、for-of循??环、展开运算符(...)甚至异步编程都依赖于迭代器(Iterator)实现。本文将详细讲解ES6的迭代器和生成器,并进一步深挖可迭代对象的内部原理和使用方法1.迭代器的原理在编程语言中处理数组或集合时,必须初始化一个变量来记录迭代位置使用循环语句和迭代器的编程使用可以简化这种数据操作。如何设计一个迭代器?迭代器本身是一个对象。这个对象有一个next()方法来返回结果对象。这个结果对象有下一个返回值和迭代完成布尔值done。模拟创建了一个简单的迭代器,如下所示:iterms[i++]:undefinedreturn{done,value}}}}letarrayIterator=createIterator([1,2,3])console.log(arrayIterator.next())//{done:false,value:1}控制台.log(arrayIterator.next())//{done:false,value:2}console.log(arrayIterator.next())//{done:false,value:3}console.log(arrayIterator.next())//{done:true,value:undefined}如果你对上面的语法感到困惑,请参考:[ES6]对象的新函数和解构赋值每次调用迭代器的next()都会返回下一个对象,直到数据集耗尽。ES6中迭代器的编写规则类似,但是引入了生成器对象,使得创建迭代器对象更加容易。2.创建迭代器ES6封装了一个生成器(generator)来创建迭代器。显然,生成器是一个返回迭代器的函数,迭代器在函数后用星号(*)表示,并使用新的内部专用关键字yield来指定迭代器的next()方法的返回值。如何使用ES6生成器创建迭代器?一个简单的例子如下:function*createIterator(){yield123;yield'someValue'}letsomeIterator=createIterator()console.log(someIterator.next())//{value:123,done:false}console.log(someIterator.next())//{value:'someValue',done:false}console.log(someIterator.next())//{value:undefined,done:true}使用yield关键字返回任意值或Expression,可以批量向迭代器添加元素://letcreateIterator=function*(items){//生成器函数表达式function*createIterator(items){for(leti=0;i
