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数据类型详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!