发布于2021-03-07 21:20 阅读(1314) 评论(0) 点赞(4) 收藏(3)
今天学习了es6的生成器和迭代器,真的有很多感想,我是一个正在学习前端的学生,可能说的不对,可以请各大大神多多包涵,就是总结一个我学到的东西。好了现在开始
再说生成器迭代器之前,要先了解一个es6的知识,就是es6新添加的数组的扩展,有三个功能是entries() , keys() , values(),这三个功能很类似,都是在干一件事情,举个例子:
for(let index of ['a','b','c','d'].keys(){
console.log(index) //0,1,2,3
}
for(let values of ['a','b','c'].values()){
console.log(values) //'a','b','c'
}
for(let [index,value] of ['a','b','c'].entries()){
console.log([index,value]) // [0,'a'],[1,'b'],[2,'c'];
}
entries() , keys() , values() 这三个函数,返回都会返回一个遍历器,所有它们返回的值,都具备了遍历器的功能,所有就可以使用for…of这个方法。
好了,如果这三个方法明白了,之后就可以进入生成器迭代器了。
何为迭代器呢?就是一种新的遍历机制。我总结出它又两个核心,一个就是它是一个接口,能够快速的访问数据。第二个,就是用于遍历数据结构的指针。先说一个比较简单的对数组的迭代器吧。
const items = ['one','two','three'];
//创建迭代器
const ite = items(Symbol.Iterator)();
//进行获取
console.log(ite.next()) //{value:'one',done:false}
console.log(ite.next()) //{value:'two',done:false}
console.log(ite.next()) //{value:'three',done:false}
console.log(ite.next()) //{value:undefined,done:true}
ite.next()的结果是什么意思呢?就是遍历出数组的值,done代表遍历是否完成,在第四次调用ite.next()的时候,已经没有值了,所以done的值为true。
生成器是一个函数,但是它与普通的函数的区别是:声明函数的方法是:
function* func(ele){
console.log(ele);
}
另一个区别是,只能在函数内部调用yield。解释一个yield哈,就是这个生成器通过yield关键字,将函数挂起,再解释的清晰一点,就是说,如果你声明一个函数,在内部你可以写一个yield,就可以把函数的“进程”卡在那里。生成器generator有一个方法是next(),此方法就是把yield卡住的地方,重新打开,让函数里面的内容继续走下去
function* func(){
console.log('start');
yield "2";
console.log('end');
}
let fn = func();
fn.next(); // "start" //{value:'2',done:false}
总结一小下:generator是分段执行的,yield是暂停执行,next()是恢复执行。
迭代器和生成器使用场景,用的最多的就有两类,今天先说一类,另外一类下次再分享。
这迭代器生成器就是,为不具有迭代器的对象,创建接口。
来个例子:
//第一步 创建一个无迭代器接口的对象
let obj = {
name: "xiaoChen",
age: 21
}
//第二步 写一个迭代器接口 (用到了keys(),忘了往上看看哈)
function* objectEntries(obj){
const Keys = Object.keys(obj);
for(let key of Keys){
yield [key,obj[key]];
}
}
//第三步 给obj接口
obj[Symbol.iterator] = objectEntries;
//第四步 遍历
for(let [name,age] of objectEntries(obj)){
console.log(`${name}:${age}`); //name: "xiaoChen",age: 21
}
//成功的遍历出obj里面的属性
好了分享到这里了,另外一个使用的场景下次再分享。
原文链接:https://blog.csdn.net/iloveyu123/article/details/114442791
作者:天使的翅膀
链接:http://www.qianduanheidong.com/blog/article/33493/4c53492718675933b471/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!