迭的意思就是交换、轮流,代的意思就是代替,迭代就是轮流交换,这里说的Iterators有几个特点:
1、每次执行的时候会返回一个对象,这个对象里面有两个东西,一个是value,也就是返回来的值;还有就是done,它的值是布尔值,表示还有没有可以迭代的东西,没有了的话,这个done的值就是true,表示完成了迭代
{value:xx,done:true/false}
2、另外Iterators里还应该有next的方法,每次执行方法的时候会返回一个对象,对象里面的东西就是value和done这两个属性,如果没有迭代的东西的话,执行next方法以后,value的值就会变为undefined,done的值会变为ture
在ES6里面有一个叫做Generators的东西,可以去生成我们刚才说的这个迭代器,在介绍Generators之前,我们先手工创建一个迭代器,这个迭代器可以是一个函数,例子:
function chef(foods){ //foods:数组参数
let i = 0; //定义索引值的变量 return { next(){ //定义每次执行next的方法的时候返回来的value还有done的值 let done= (i>=foods.length); //done的值:有迭代的东西的时候是false,没有的话就是ture let value = !done?foods[i++]:undefined; //value的值:先问下done的值,如果这个done的反向值是true的话,value的值就会是当前这次循环的时候,这个foods里面某一个项目的值;如果done的值是ture的话,value的值就会是undefined return{ value:value, done:done } } } //运用迭代器 let zhangsan=chef(['tomato','eggs']); console.log(zhangsan.next()); //{value:'tomato',done:false} console.log(zhangsan.next()); //{value:'eggs',done:false} console.log(zhangsan.next()); //{value:undefined,done:true}