如何通过引用将JavaScript对象复制到新variables?

我在这里写了一个快速jsfiddle,在这里我将一个小的json对象传递给一个新的variables,并修改原始variables(不是新variables)的数据,但新variables的数据也被更新。 这一定意味着json对象是通过引用传递的,对吧?

这是我的快速代码:

var json_original = {one:'one', two:'two'} var json_new = json_original; console.log(json_original); //one, two console.log(json_new); //one, two json_original.one = 'two'; json_original.two = 'one'; console.log(json_original); //two, one console.log(json_new); //two, one 

有没有办法做一个JSON对象的深层副本,以便修改原始variables不会修改新variables?

我发现,如果你不使用jQuery,只对克隆简单对象感兴趣,请参阅以下内容(请参阅注释)。

 JSON.parse(JSON.stringify(json_original)); 

你唯一的select是以某种方式克隆对象。

看到这个问题 ,你可以如何实现这个。

对于简单的JSON对象,最简单的方法是:

 var newObject = JSON.parse(JSON.stringify(oldObject)); 

如果你使用jQuery,你可以使用:

 // Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject); 

更新2017年:我应该提及,因为这是一个受欢迎的答案,现在有更好的方法来实现这个使用更新版本的JavaScript:

在ES6或TypeScript(2.1+)中:

 var shallowCopy = { ...oldObject }; var shallowCopyWithExtraProp = { ...oldObject, extraProp: "abc" }; 

请注意,如果“extraProp”也是oldObject上的一个属性,则不会使用它的值,因为extraProp:“abc”将在后面的expression式中指定,这基本上会覆盖它。 当然,oldObject不会被修改。