next()的理解

总结的简单流程是:

(1)执行next后会从上往下依次返回每个yield表达式的值,

(2)如果next有传参的话,会整个覆盖掉将要返回当前yield的上一个yield,

(3)方法内的yield表达式和return都执行完了,就会直接返回undefined了。

所以它的流程才会是:

入参  分析结果
1  1(无论是否传参,传什么参数,返回第一个表达式的值1)
2  2(返回第二个表达式的值yield a,a=上一个yield表达式yield 1,被参数3覆盖,所以a=3)
4  4(返回第三个表达式的值yield b,b=上一个yield表达式yield a,被参数4覆盖,所以b=4)
5  11(返回return a+b+c,c=上一个yield表达式yield b,被参数5覆盖,所以c=5,也就是a+b+c=2+4+5=11)

 

新的遍历方法:entries(),keys()和values()

keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

let a = [1,3,5].keys();
a; // 一个迭代器对象
a.next(); // {value: 0, done: false}
a.next(); // {value: 1, done: false}
a.next(); // {value: 2, done: false}
a.next(); // {value: undefined, done: true}

字符串的遍历:


for (let codePoint of 'qwertyuiop') {

  console.log(codePoint);

}

给对象加遍历器:
 

var person={
          name: 'zz',
           age: 18
       }

              //给person对象添加一个iterator接口
              person[Symbol.iterator] = function(){

                 //使用object.keys()方法把j对象中的k值读取出来存在数组当中
                  var arr = Object.keys(person);
                  var i = 0;
                  return {
                     //ES6中next()迭代方法,自动迭代
                     next(){
                         if(i < arr.length){
                             //如果done为false,继续迭代
                             return {
                                 //返回迭代的最后结果,如果是一个对象,那么for of的时候需要用解构
                                 value: {
                                     k  : arr[i],
                                     val: person[arr[i++]]
                                 },
                                 done: false
                             }
                         }else{
                             //如果done为true,继续迭代
                             return {
                                 value: null,
                                 done : true
                             }
                         }
                     }
                 }
             }

            //解构获取返回得到的对象,输出k值,val值
             for(var {key,val} of person){
                 console.log(key,val);
             }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值