首页 > 解决方案 > 为什么即使对象被克隆,Object.values 也会保留其父级的引用?

问题描述

假设您有一个object obj = { a : [1, 2] }并且您创建了它的克隆,objClone = Object.assign({}, obj)并且当您修改 Object.values(objClone)[0][1] 时,父 obj 也会被修改。有人可以解释为什么吗?

标签: javascriptreactjsecmascript-5

解决方案


在:

let objA = { a : [1, 2] }

的值objA.a是对由数组字面量创建的数组的引用。因此,当您复制对象时:

let objB = Object.assign({}, objA)

那么 的值objB.a是 的值的副本objA.a,因此是对同一数组的引用。

这通常被称为“浅拷贝”,也就是说,它只是一个简单的值副本,没有解析引用以复制它们引用的任何内容。

当你这样做时:

console.log(objA.a)

然后解析引用,因此它打印数组的内容,而不是引用的实际值(这有点没用)。


推荐阅读