JavaScript中 ES6 generator數(shù)據(jù)類型詳解
1. generator簡介
generator 是ES6引入的新的數(shù)據(jù)類型, 看上去像一個(gè)函數(shù),除了使用return返回, yield可以返回多次。
generator 由function* 定義, (注意*號),
2. 示例
函數(shù)無法保存狀態(tài), 有時(shí)需要全局變量來保存數(shù)字;
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 一個(gè)無限循環(huán)的迭代器
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()
當(dāng)?shù)Y(jié)束時(shí), Generator.next().done ===true, 結(jié)束之前 ===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方法 返回給定的參數(shù)值,并結(jié)束迭代器
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了, 再調(diào)用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()方法, 通過拋出一個(gè)異常到迭代器中,來重新獲得迭代器的執(zhí)行;
返回 帶有 value和done兩個(gè)屬性的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數(shù)據(jù)類型詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
微信小程序?qū)崿F(xiàn)上傳照片代碼實(shí)例解析
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)上傳照片代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
微信小程序自定義tab實(shí)現(xiàn)多層tab嵌套功能
微信小程序非常火爆,今天腳本之家小編給大家?guī)淼奈⑿判〕绦蜃远xtab實(shí)現(xiàn)多層tab嵌套功能以及項(xiàng)目中遇到的問題及解決方法,感興趣的朋友一起看看吧2018-06-06
輕松玩轉(zhuǎn)BootstrapTable(后端使用SpringMVC+Hibernate)
這篇文章主要和大家輕松玩轉(zhuǎn)BootstrapTable,后端使用SpringMVC+Hibernate,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
javascript 對象數(shù)組根據(jù)對象object key的值排序
本文僅僅是實(shí)現(xiàn)了javascript 對象數(shù)組根據(jù)對象object key的值排序,算是對自己學(xué)習(xí)javascript這么久的一個(gè)小結(jié),希望大家能夠喜歡2015-03-03

