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 相关文章推荐
用javascript实现给出的盒子的序列是否可连为一矩型
Aug 30 Javascript
再论Javascript下字符串连接的性能
Mar 05 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
javascript实现连续赋值
Aug 10 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
Feb 15 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
Aug 04 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
Promise扫盲贴
Jun 24 Javascript
前端深入理解Typescript泛型概念
Mar 09 Javascript
vue实现标签云效果的示例
Nov 09 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
用PHP实现验证码功能
2006/10/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
高中打架检讨书
2014/02/13 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
大学生学习计划书
2014/09/15 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
考试作弊检讨书
2015/01/27 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
PL350与SW11的比较
2021/04/22 无线电
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python