JavaScript中 ES6 generator数据类型详解
1.generator简介
generator是ES6引入的新的数据类型,看上去像一个函数,除了使用return返回,yield可以返回多次。
generator由function*定义,(注意*号),
2.示例
函数无法保存状态,有时需要全局变量来保存数字;
2.1
'usestrict'; functionnext_id(){ varid=1; while(id<100){ yieldid; id++; } returnid; } //测试: var x, pass=true, g=next_id(); for(x=1;x<100;x++){ if(g.next().value!==x){ pass=false; alert('测试失败!'); break; } } if(pass){ alert('测试通过!'); }
2.2一个无限循环的迭代器
function*idMaker(){ varindex=0; while(true) yieldindex++; } vargen=idMaker();//"Generator{}" console.log(gen.next().value);//0 console.log(gen.next().value);//1 console.log(gen.next().value);//2
2.3Generator.prototype.next()
当迭代结束时,Generator.next().done===true,结束之前===false
function*gen(){ yield1; yield2; yield3; } varg=gen();//"Generator{}" g.next();//"Object{value:1,done:false}" g.next();//"Object{value:2,done:false}" g.next();//"Object{value:3,done:false}" g.next();//"Object{value:undefined,done:true}"
2.4Generator.prototype.return();
return方法返回给定的参数值,并结束迭代器
example
function*gen(){ yield1; yield2; yield3; } varg=gen(); g.next();//{value:1,done:false} g.return("foo");//{value:"foo",done:true} g.next();//{value:undefined,done:true}
注意如果done的值是true了,再调用return,返回的值也是undefined
function*gen(){yield1;} varg=gen(); console.log(g.next());//{value:1,done:false} console.log(g.next());//{value:undefined,done:true} console.log(g.return(1));//{value:undefined,done:true}
2.5Generator.prototype.throw()
thorw()方法,通过抛出一个异常到迭代器中,来重新获得迭代器的执行;
返回带有value和done两个属性的object对象
function*gen(){ while(true){ try{ yield42; }catch(e){ console.log("Errorcaught!"); } } } varg=gen(); vara=g.next(); //{value:42,done:false} varb=g.throw(newError("Somethingwentwrong")); //"Errorcaught!" //{value:42,done:false} console.log(a); console.log(b.value+"::"+b.done);
以上所述是小编给大家介绍的JavaScript中ES6generator数据类型详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!