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 相关文章推荐
教您去掉ie网页加载进度条的方法
Dec 09 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
Nov 29 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
Jun 12 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
Bootstrap Table快速完美搭建后台管理系统
Sep 20 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
Angular ElementRef简介及其使用
Oct 01 Javascript
jQuery实现轮播图效果
Nov 26 jQuery
基于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 MYSQL 数据备份类
2009/06/19 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python装饰器常见使用方法分析
2019/06/26 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
python用什么编辑器进行项目开发
2020/06/17 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
资料员的岗位职责
2013/11/20 职场文书
组织关系转移介绍信
2014/01/16 职场文书
争先创优活动总结
2014/08/27 职场文书
2015年三万活动总结
2015/03/25 职场文书
幸福终点站观后感
2015/06/04 职场文书
文书工作总结(范文)
2019/07/11 职场文书