假设您有一个object obj = { a : [1, 2] }
,并为其创建一个副本objClone = Object.assign({}, obj)
,然后在修改Object.values(objClone)[0] [1]时,父obj也将被修改。有人可以解释为什么吗?
输入:
let objA = { a : [1, 2] }
objA.a
的值是对由数组文字创建的数组的引用。因此,当您复制对象时:
let objB = Object.assign({}, objA)
然后objB.a
的值是objA.a
的值的副本,因此是对同一数组的引用。
[通常被称为“浅表副本”,也就是说,它只是值的简单副本,没有解析引用以复制其引用的任何内容。
[执行时:
console.log(objA.a)
然后解析引用,以便它打印数组的内容,而不是引用的实际值(这将有点用处。)]