How to copy JavaScript object to new variable NOT by reference?
本问题已经有最佳答案,请猛点这里访问。
我在这里编写了一个快速的JSfiddle,在这里我将一个小的JSON对象传递给一个新变量,并修改原始变量(不是新变量)中的数据,但是新变量的数据也会得到更新。这一定意味着JSON对象是通过引用传递的,对吧?
这是我的快捷代码:
1 2 3 4 5 6 7 8 9 10 11 12 | 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对象进行深度复制,这样修改原始变量就不会修改新变量?
我发现,如果您不使用jquery,并且只对克隆简单对象感兴趣,那么下面的内容可以工作(请参见注释)。
1 | JSON.parse(JSON.stringify(json_original)); |
您唯一的选择是以某种方式克隆对象。
请参阅这个stackoverflow问题,了解如何实现这一点。
对于简单的JSON对象,最简单的方法是:
1 | var newObject = JSON.parse(JSON.stringify(oldObject)); |
如果使用jquery,则可以使用:
1 2 3 4 5 | // Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject); |
更新2017:我应该提到,因为这是一个很流行的答案,现在有更好的方法来使用新版本的javascript实现这一点:
在es6或typescript(2.1+)中:
1 2 3 | var shallowCopy = { ...oldObject }; var shallowCopyWithExtraProp = { ...oldObject, extraProp:"abc" }; |
注意,如果