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用get实现ajax在ie里面刷新不进入后台解决方法
Aug 12 Javascript
javascript中apply和call方法的作用及区别说明
Feb 14 Javascript
深入浅析JavaScript面向对象和原型函数
Feb 06 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
微信小程序 实现tabs选项卡效果实例代码
Oct 31 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
详解React项目的服务端渲染改造(koa2+webpack3.11)
Mar 19 Javascript
vue2.0获取鼠标位置的方法
Sep 13 Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 Javascript
vue实现tab栏点击高亮效果
Aug 19 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
python编写弹球游戏的实现代码
2018/03/12 Python
python画微信表情符的实例代码
2019/10/09 Python
香港零食网购:上仓胃子
2020/06/08 全球购物
实现向右循环移位
2014/07/31 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
安全资料员岗位职责
2013/12/14 职场文书
两只小狮子教学反思
2014/02/05 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
英语系毕业生求职信
2014/07/13 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers