展开符用在对象中报错

我们能否以某种方式为下面的语句使用展开运算而不导致类型错误?

在微信公众号上看到的题目

var obj = { x: 1, y: 2, z: 3 };
[...obj]; // TypeError 

会报出这个错误应该说的是不是可迭代的对象
图片描述

想请教一下这个问题

阅读 2.6k
2 个回答

对象怎么展开也不能展开成一个数组啊= =.... {...obj}

扩展运算符语法只能用于可迭代对象,即实现了Iterator接口(即迭代器)的对象.像 Array,String,Map,Set 都内置了迭代器,所以可以直接用扩展运算符.
那一个没有内置迭代器的对象要怎么样使用扩展运算符呢?很简单,给他加上迭代器就可以了.
如下 ↓

var obj = { x: 1, y: 2, z: 3 }

// 定义迭代器
obj[Symbol.iterator]=function*(){
    for(let key in this)
        yield this[key]
}

// 记得在中括号前面加上分号
;[...obj]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题