JavaScript 扩展运算符:克隆对象后深层属性发生变化

Deb*_*ger 1 javascript

我得到的输出是 5,但我假设是 3。背后的逻辑是什么以及如何使输出 3。

const obj = {
  a: 1,
  b: 2,
  c: {
    p: 3
  }
}
const obj1 = { ...obj}
obj.c.p = 5

console.log(obj1.c.p)
Run Code Online (Sandbox Code Playgroud)

Maj*_*awi 5

上面仅克隆了第一层,因此更改 的objdeep 属性将更改中的引用obj1

const obj = {
  a: 1,
  b: 2,
  c: { p: 3 }
};

const obj1 = { ...obj, c: {...obj.c} };
obj.c.p = 5;

console.log(obj1.c.p);
Run Code Online (Sandbox Code Playgroud)