我理解传播运算符制作对象的浅拷贝,即克隆对象引用与原始对象相同的引用。但实际行为似乎矛盾和混乱。
const oldObj = {a: {b: 10}};
const newObj = {...oldObj};
oldObj.a.b = 2;
newObj //{a: {b: 2}}
oldObj //{a: {b: 2}}
Run Code Online (Sandbox Code Playgroud)
上述行为是有道理的,newObj 也通过更新 oldObj 来更新,因为它们引用相同的位置。
const oldWeirdObj = {a:5,b:3};
const newWeirdObj = {...oldWeirdObj};
oldWeirdObj.a=2;
oldWeirdObj //{a:2,b:3}
newWeirdObj //{a:5,b:3}
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么 newWeirdObj 没有像 oldWeirdObj 那样更新?如果我没有错,他们仍然指的是同一个位置,但为什么更新到 oldWeirdObj 而不更新 newWeirdObj ?