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 相关文章推荐
5个javascript的数字格式化函数分享
Dec 07 Javascript
jquery插件corner实现圆角边框的方法
Mar 09 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
JavaScript的继承实现小结
May 07 Javascript
JavaScript简单拖拽效果(1)
May 17 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
Dec 09 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
javascript创建元素和删除元素实例小结
Jun 19 Javascript
layui树形菜单动态遍历的例子
Sep 23 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
vue3中的组件间通信
Mar 31 Vue.js
基于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初学者们头痛的十四个问题
2007/01/15 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Python argv用法详解
2016/01/08 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
深入理解Python中装饰器的用法
2016/06/28 Python
django 创建过滤器的实例详解
2017/08/14 Python
python正则中最短匹配实现代码
2018/01/16 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
Hotels.com南非:酒店预订
2017/11/02 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
给民警的表扬信
2014/01/08 职场文书
经销商培训邀请函
2014/01/21 职场文书
小学语文教学反思
2014/02/10 职场文书
邀请函怎么写
2015/01/30 职场文书
鸡毛信观后感
2015/06/11 职场文书
优秀教师工作总结2015
2015/07/22 职场文书