克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.
我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.
我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.
我理解传播运算符制作对象的浅拷贝,即克隆对象引用与原始对象相同的引用。但实际行为似乎矛盾和混乱。
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 ?