JavaScript中 ES6 generator数据类型详解


Posted in Javascript onAugust 11, 2016

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

Javascript 相关文章推荐
jquery.post用法关于type设置问题补充
Jan 03 Javascript
用js替换除数字与逗号以外的所有字符的代码
Jun 07 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
Extjs grid panel自带滚动条失效的解决方法
Sep 11 Javascript
JavaScript中遍历对象的property的3种方法介绍
Dec 30 Javascript
深入理解Javascript中的自执行匿名函数
Jun 03 Javascript
JS给swf传参数的实现方法
Sep 13 Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 Javascript
JavaScript正则表达式和级联效果
Sep 14 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 jQuery
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 #Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 #Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 #Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 #Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 #Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 #Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 #Javascript
You might like
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
Python的log日志功能及设置方法
2019/07/11 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
python中的逆序遍历实例
2019/12/25 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
怎样写演讲稿
2014/01/04 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
企业百日安全活动总结
2015/05/07 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL