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 函数调用的对象和方法
Jul 01 Javascript
ejs v9 javascript模板系统
Mar 21 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
Javascript异步编程模型Promise模式详细介绍
May 08 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
详解angularjs的数组传参方式的简单实现
Jul 28 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
webpack打包多页面的方法
Nov 30 Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 Javascript
JavaScript 事件代理需要注意的地方
Sep 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数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
JavaScript触发器详解
2007/03/10 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
基于ionic实现下拉刷新功能
2018/05/10 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
初婚初育证明范本
2014/11/24 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
单位介绍信格式
2015/01/31 职场文书
公司员工奖惩制度
2015/08/04 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python