美文网首页
每日一题2020-04-20

每日一题2020-04-20

作者: 欢欢小天使K | 来源:发表于2020-04-20 22:59 被阅读0次

    每日一题

    var obj = {x: 1, y: 2, z: 3};
    [...obj]
    能否以某种方式为上面的语句是用展开运算而不导致类型错误,如果可以,写出解决方式

    答案:可以。解决方式见解析

    解析:

    展开语法和for...of语句遍历iterable对象定义要遍历的数据。
    Array和Map是具有默认迭代行为的内置迭代器。对象不是可迭代的,但是可以通过使用iterable和iterator协议使他们可迭代。
    在Mozilla文档中,如果一个对象实现了@iterabtor方法,那么他就是可迭代的,这意味着这个对象(或者他的原型链上的一个对象)
    必须有一个带有@iterator键的属性,这个键可以通过常量Symbol.iterator获得。

      //解决方式一
      var obj = { x: 1, y: 2, z: 3 };
      obj[Symbol.iterator] = function(){
        //iterator 是一个具有next方法的对象
        //他的返回至少有一个对象
        //两个属性: value & done。
        return {
          //返回一个iterator对象
          next: function(){
            if(this._countDown === 7){
              // const lastValue = this._countDown;
              return { value: this._countDown, done: true };
            }
            this._countDown = this._countDown + 1;
            return { value: this._countDown, done: false };
          },
          _countDown: 0,
        };
      };
      console.log([...obj])
    

    控制台执行结果:


    image.png

    相关文章

      网友评论

          本文标题:每日一题2020-04-20

          本文链接:https://www.haomeiwen.com/subject/sbasihtx.html