如何通过引用将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不会被修改。