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 相关文章推荐
js 操作select相关方法函数
Dec 06 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
Nov 19 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
Oct 23 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
js定时器出现第一次延迟的原因及解决方法
Jan 04 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
园艺师求职信
2014/03/10 职场文书
公司管理建议书范文
2014/03/12 职场文书
护士节策划方案
2014/05/19 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
史上最牛的辞职信
2015/02/28 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
辛亥革命观后感
2015/06/02 职场文书
医院见习总结
2015/06/24 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js