js generator数据类型
1. 概述
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); //
console.log(gen.next().value); //
console.log(gen.next().value); //
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);
js generator数据类型的更多相关文章
- JavaScript知识 一、JS的数据类型
一.JS的数据类型 1.基本类型 JS共有5大基本类型,分别是: 1)Undefined.他只有一个值:undefined.如果一个变量被定义但是没有给他赋值,那么这个时候系统会默认给这个变量赋值为u ...
- JS中数据类型及原生对象简介
js是一种专门设计用来给网页增加交互性的编程语言,它的技术体系包含了一下几个方面: 1.JavaScript核心语言定义:包括数据类型,变量,常量,运算符,语句等. 2.原生对象和内置对象 3.浏览器 ...
- 每日学习心得:Js基本数据类型常用方法扩展
2014-02-17 前言: 节后的第一周上班,整个状态调整的还不错,已完全进入正常的工作状态.这一周主要还是对年前项目存在的一些问题进行完善.修整,基本上没有做大的改动.这里就把项目中经常用到的一些 ...
- js常用数据类型(Number,String,undefined,boolean) 引用类型( function,object,null ),其他数据类型( 数组Array,时间Date,正则RegExp ),数组与对象的使用
js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型 Number var a1 = 10; var a2 = 3.66; conso ...
- JavaScript笔记1———js的数据类型
JS的数据类型有: 1.数值类型(Number):js中所有数字均用浮点数字表示. 可以表示32位(即4字节)的整数,也可以表示64位(即8字节)的浮点数(小数). 也可以用二进制.八进制.十进制.十 ...
- js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...
- js的数据类型--字符串
js的数据类型——字符串 这篇我们来说说js的第二种数据类型——字符串. js的内置功能之一就是字符串拼接.如果将加号(+)运算符用于数字,表示两数相加.但将它作用于字符串,则表示字符串拼接,将第二个 ...
- js的数据类型--数字
近期做一些项目的时候发现,自己的js基础还是不够扎实,再看一遍犀牛书,加深自己的理解和印象.所以从这篇文章开始,后面都是关于原生js的一些内容. 这篇文章,我们具体介绍一下js的数据类型其中一种. j ...
- JS基本数据类型&流程控制
JS基本数据类型 number ----- 数值 boolean ----- 布尔值 string ----- 字符串 [x,y] -------数组 undefined ...
随机推荐
- 学习之路三十八:Hook(钩子)的学习
好久没写文章了,还记得年前面试了一家公司,为了检测一下我的学习能力,给了我一个任务,做一个自动登录并自动操作菜单的程序. 花了几天的时间研究了Hook以及使用WindowsAPI操作程序的知识,现在记 ...
- Unity3D常用代码总结
1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1 GUI.Box(Rect(1,2 ...
- OceanBase RPC机制简要说明
http://note.youdao.com/share/?id=d2163a7ba8ec1ec58e64683a961c5121&type=note RPC是OB一个比较重要的各个组件间进行 ...
- Unitils集成DBUnit的问题-解决方案
Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下: org.unitils.core.UnitilsException: Error inserting test dat ...
- PHP/MYSQL UTF8 中文排序
1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行.用gbk和gb2312可以.这跟几种格式的编码有关系.gbk和gb2312本身的编码就是用拼音排序的. f ...
- oracle vm virtualbox 如何让虚拟机可以上网
刚安装了虚拟机,系统linux2.6. 可是想安装一些软件,发现没法联网.郁闷~ 还要手动设置网络,可是也不是小白就可以干的事情,还要弄清楚原理才行. http://reverland.bitbuc ...
- 解决“iOS 7 app自动更新,无法在app中向用户展示更新内容”问题
转自cocoachina iOS 7能在后台自动app,这对开发者来说和用户都很方便,但是还是有一些缺点.用户不会知道app本次更新的内容,除非他们上到app的App Store页面去查看.开发者也会 ...
- [LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence
一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全 ...
- [LeetCode] Fraction to Recurring Decimal 哈希表
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- MYSQL开发性能研究——批量插入的优化措施
一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方 ...