Javascript正在改变只需要引用的变量

时间:2014-02-24 16:44:46

标签: javascript arrays web

我正在从参考对象中提取一些数据来改变它我需要的东西,但由于某种原因,我的代码也在改变我正在引用的对象..

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'。似乎无法弄清楚

2 个答案:

答案 0 :(得分:2)

示例中的obj不是对象,它是对存在于内存中的对象的引用。这就是当您执行ref=obj时,您获得对同一对象的另一个引用的原因,因此更改对象ref引用与更改对象obj引用相同。

您要做的是克隆您的对象,因此您最终得到两个不同的对象。关于StackOverflow和整个网络上的克隆有一些很好的答案。随意使用其中任何一个。

答案 1 :(得分:0)

JavaScript通过引用指定。您需要执行深层复制才能克隆对象。

请参阅:http://webdevwonders.com/deep-copy-javascript-objects/