javascript - 为什么即使对象被克隆,Object.values 也会保留其父级的引用?
问题描述
假设您有一个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)
然后解析引用,因此它打印数组的内容,而不是引用的实际值(这有点没用)。