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(笔记)
Oct 06 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
jquery ajax jsonp跨域调用实例代码
Dec 11 Javascript
JS判断客户端是手机还是PC的2个代码
Apr 12 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
jquery动态增加删减表格行特效
Nov 20 Javascript
再谈Javascript中的异步以及如何异步
Aug 19 Javascript
基于jQuery实现表格的排序
Dec 02 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
Aug 27 Javascript
JS实现的简单表单验证功能完整实例
Oct 14 Javascript
vuex页面刷新后数据丢失的方法
Jan 17 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 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中几个常用的魔术常量
2012/02/23 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
详解python中list的使用
2019/03/15 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
Champion官网:美国冠军运动服装
2017/01/25 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
公司总经理岗位职责
2015/04/01 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
手把手教你导入Go语言第三方库
2021/08/04 Golang