首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[...obj]和{...obj}之间的差异

[...obj]和{...obj}之间的差异
EN

Stack Overflow用户
提问于 2022-05-31 13:43:21
回答 2查看 42关注 0票数 -3

我知道...在JavaScript中的传播操作符。我们可以在数组和对象上使用它:

代码语言:javascript
复制
let user = {
  name: "aman",
  rollno: 11
}

let newobj1 = {...user}
let newobj2 = [...user]
console.log(newobj1)
console.log(newobj2)

为什么newobj2会给出一个错误,TypeError: user is not iterable,但是newobj1工作得很好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-31 14:08:51

{...user}只创建一个新对象,其属性与user相同。

另一方面,[...user]遍历对象并将它找到的值添加到它返回的数组中。如果没有迭代的方法,因为默认情况下在普通对象(相对于数组)上没有迭代,那么这将不起作用,并引发您引用的错误。

与往常一样,在MDN上有更多关于这方面的信息。特别要注意的是,下面是部分:

扩展语法(在扩展属性的情况下除外)只能应用于像Array这样的可迭代对象,或者使用迭代函数,如map()reduce()assign()。 许多对象是不可迭代的,包括Object: 让obj ={‘key1 1’:'value1'};让数组= ...obj;// TypeError: obj不可迭代 要对这些对象使用扩展语法,您需要提供一个迭代器函数。

请注意,这里所指的“扩展语法”是“数组扩展”版本。“对象传播”非常不同,并在页面的部分进行了解释,

票数 2
EN

Stack Overflow用户

发布于 2022-05-31 13:55:29

{...user}

这意味着您创建了新的对象,并在其中传播了来自user的所有数据。

当你打算执行

...user

您尝试创建全新的数组,然后将user对象扩展到内部。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72448951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档