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 相关文章推荐
jQuery淡入淡出元素让其效果更为生动
Sep 01 Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
Vue filter介绍及详细使用
Apr 04 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
Canvas跟随鼠标炫彩小球的实现
Apr 11 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默认安装产生系统漏洞
2006/10/09 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
js css自定义分页效果
2017/02/24 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
Python中django学习心得
2017/12/06 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
Django如何批量创建Model
2020/09/01 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
安全生产实施方案
2014/02/23 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
公司募捐倡议书
2014/05/14 职场文书
志愿者工作心得体会
2016/01/15 职场文书
素质教育培训心得体会
2016/01/19 职场文书
高中政治教学反思
2016/02/23 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
详细介绍python操作RabbitMq
2022/04/12 Python