JavaScript中 ES6 generator数据类型详解

1. generator简介

generator 是ES6引入的新的数据类型, 看上去像一个函数,除了使用return返回, yield可以返回多次。

generator 由function* 定义,(注意*号),

2. 示例

函数无法保存状态, 有时需要全局变量来保存数字;

2.1

rush:js;"> 'use strict'; function next_id(){ var id = 1; while(id<100){ yield id; id++; } return id; } // 测试: 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 一个无限循环的迭代器

rush:js;"> function* idMaker(){ var index = 0; while(true) yield index++; } var gen = 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

rush:js;"> function* gen() { yield 1; yield 2; yield 3; } var g = 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.4 Generator.prototype.return();

return方法 返回给定的参数值,并结束迭代器

example

rush:js;"> function* gen() { yield 1; yield 2; yield 3; } var g = gen(); g.next(); // { value: 1,done: false } g.return("foo"); // { value: "foo",done: true } g.next(); // { value: undefined,done: true }

注意 如果 done的值是true了, 再调用return,返回的值也是undefined

rush:js;"> function* gen() {yield 1;} var g = 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.5 Generator.prototype.throw()

thorw()方法, 通过抛出一个异常到迭代器中,来重新获得迭代器的执行;

返回 带有 value和done两个属性的object对象

rush:js;"> function* gen() { while(true) { try { yield 42; } catch(e) { console.log("Error caught!"); } } } var g = gen(); var a = g.next(); // { value: 42,done: false } var b = g.throw(new Error("Something went wrong")); // "Error caught!" // { value: 42,done: false } console.log(a); console.log(b.value+"::"+b.done);

以上所述是小编给大家介绍的JavaScript中 ES6 generator数据类型详解。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...