【发布时间】:2019-05-08 17:02:12
【问题描述】:
所以我尝试了一个简单的例子:
const original = [
{id: 0, color: "red"},
{id: 1, color: "blue"}
]
const copy = [...original]
copy[0] = {id:2, color:"red"}
copy[1].id = 2
console.log(original)
console.log(copy)
我得到的结果令人困惑:
Array [Object { id: 0, color: "red" }, Object { id: 2, color: "blue" }]
Array [Object { id: 2, color: "red" }, Object { id: 2, color: "blue" }]
当我更改整个对象时,更改只发生在副本数组中。
那么为什么 copy[1].id = 2 实际上也改变了原始数组而不仅仅是复制数组中的一个键??
【问题讨论】:
-
[...array]创建一个包装原始对象的新数组。所以包含的数组引用与原始是唯一的,但数组中的对象是原始对象 -
第一件事:它看起来像被称为“运算符”的东西,但它不是运算符。
-
传播只是一个浅副本。它是对相同旧对象的引用的新数组。
-
因为没有发生深拷贝,只有数组内容的拷贝。所以数组中的对象是相同的。
-
这里还有什么
array?应该是original?
标签: javascript arrays operator-keyword spread-syntax