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中Object和Function的关系的三段简单代码
Jun 27 Javascript
Tips 带三角可关闭的文字提示
Oct 06 Javascript
JavaScript中Function函数与Object对象的关系
Dec 17 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
javascript iframe跨域详解
Oct 26 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
JS实现复制内容到剪贴板功能
Feb 05 Javascript
vue 之 css module的使用方法
Dec 04 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 Javascript
微信小程序wxs实现吸顶效果
Jan 08 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使用MySQL保存session会话的方法
2015/06/26 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
Js获取事件对象代码
2010/08/05 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
javascript表单正则应用
2017/02/04 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python3.7.0的安装步骤
2018/08/27 Python
python简单操作excle的方法
2018/09/12 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
公司管理建议书范文
2014/03/12 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
药剂专业求职信
2014/06/20 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
神秘岛读书笔记
2015/07/01 职场文书
春季运动会加油词
2015/07/18 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL