将var分配给temp var并不会阻止原始var的更改

时间:2012-11-27 23:51:39

标签: javascript node.js

好的stackoverflow,

我一直在努力解决javascript中的问题(在NodeJS服务器上写)但我真的不明白。

这就是:

var data = {x: 50};
var temp = data;
temp.x = 100;
console.log(data.x);
//logs 100

我已经测试了这个确切的代码,它确实显示了100

我的问题:

如何将var克隆到临时值并更改temp var而不更改原始值。

3 个答案:

答案 0 :(得分:4)

您必须克隆原始对象。这是因为将对象存储在另一个变量中不会创建具有与前一个相同属性的新对象;它只是创建对同一对象的引用。可悲的是,没有任何内置的解决方案来解决这个问题,但有一些解决方案。在这里可以想到一些:

var temp = JSON.parse(JSON.stringify(data)); // clones the object using a hack

或者:

var temp = {}; // creates a new object and gives it all the same properties as
               // the old one.
for(prop in data) {
    if(data.hasOwnProperty(prop)) {
        temp[prop] = data[prop];
    }
}

不要自我推销,但我已经写了一篇关于这个主题的博客文章,详细介绍了一下。您可以找到here

答案 1 :(得分:3)

将对象分配给变量不会创建对象的副本。它只是创建了对同一对象的另一个引用。然后,两个变量都将指向完全相同的对象,并且更改其中任何一个(datatemp的属性)将更改完全相同的对象。

要制作一个对象的副本,必须通过将所有属性复制到一个新对象来实际制作该对象的显式副本。

答案 2 :(得分:0)

您可以使用下划线库的clone方法轻松克隆对象。

var temp = _.clone(data);