每日一题2020-04-20

每日一题

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容