我正在从参考对象中提取一些数据来改变它我需要的东西,但由于某种原因,我的代码也在改变我正在引用的对象..
var obj = {name:"list of things", list:[{name:"thing", 1},{name:"other thing", 2}]};
function doStuff () {
var ref = obj;
for(var p=0;p<ref.list.length;p++){
ref.list.splice(1,1);
}
return ref;
}
出于某些原因,我在我的代码中使用了这个结构,它改变了'obj'以及'ref'。似乎无法弄清楚
答案 0 :(得分:2)
示例中的obj
不是对象,它是对存在于内存中的对象的引用。这就是当您执行ref=obj
时,您获得对同一对象的另一个引用的原因,因此更改对象ref
引用与更改对象obj
引用相同。
您要做的是克隆您的对象,因此您最终得到两个不同的对象。关于StackOverflow和整个网络上的克隆有一些很好的答案。随意使用其中任何一个。
答案 1 :(得分:0)
JavaScript通过引用指定。您需要执行深层复制才能克隆对象。