generator 是 ES6 引入的新的数据类型,由 function* 定义, (注意 * 号), 接下来通过本文给大家介绍 js 中 ES6 generator 数据类型,非常不错,感兴趣的朋友一起学习吧
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
1. generator 简介
generator 是 ES6 引入的新的数据类型, 看上去像一个函数,除了使用 return 返回, yield 可以返回多次。
generator 由 function* 定义, (注意 * 号),
2. 示例
函数无法保存状态, 有时需要全局变量来保存数字;
2.1
- '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 一个无限循环的迭代器
- 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
- 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
- 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
- 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 对象
- 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 数据类型详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 phperz 网站的支持!
来源: http://www.phperz.com/article/17/0307/263638.html