[...obj] 和 {...obj} 之间的区别
Difference between [...obj] and {...obj}
我知道 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
工作正常?
{...user}
意味着您创建了一个新对象,并将来自 user
的所有数据散布在其中。
当你想执行
[...user]
您尝试创建全新的数组,然后将 user
对象散布在其中。
{...user}
只是创建一个与 user
.
具有相同属性的新对象
另一方面,[...user]
遍历对象并将找到的值添加到数组 returns 中。如果没有办法进行迭代,因为默认情况下没有普通对象(而不是数组),那么这将不起作用并引发您引用的错误。
一如既往,MDN. Note in particular the following 部分提供了更多相关信息:
Spread syntax (other than in the case of spread properties) can only
be applied to iterable objects like Array
, or with iterating
functions such as map()
, reduce()
, and assign()
.
Many objects are not iterable, including Object
:
let obj = {'key1': 'value1'};
let array = [...obj]; // TypeError: obj is not iterable
To use spread syntax with these objects, you will need to provide an
iterator function.
请注意,这里提到的“扩展语法”是“数组扩展”版本。 “对象传播”相当不同,并在页面的 this 部分进行了解释,
我知道 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
工作正常?
{...user}
意味着您创建了一个新对象,并将来自 user
的所有数据散布在其中。
当你想执行
[...user]
您尝试创建全新的数组,然后将 user
对象散布在其中。
{...user}
只是创建一个与 user
.
[...user]
遍历对象并将找到的值添加到数组 returns 中。如果没有办法进行迭代,因为默认情况下没有普通对象(而不是数组),那么这将不起作用并引发您引用的错误。
一如既往,MDN. Note in particular the following 部分提供了更多相关信息:
Spread syntax (other than in the case of spread properties) can only be applied to iterable objects like
Array
, or with iterating functions such asmap()
,reduce()
, andassign()
.Many objects are not iterable, including
Object
:let obj = {'key1': 'value1'}; let array = [...obj]; // TypeError: obj is not iterable
To use spread syntax with these objects, you will need to provide an iterator function.
请注意,这里提到的“扩展语法”是“数组扩展”版本。 “对象传播”相当不同,并在页面的 this 部分进行了解释,