如何不通过引用将JavaScript对象复制到新变量?[重复]

2020/10/22 23:02 · javascript ·  · 0评论

在这里写了一个快速的jsfiddle ,在其中我将一个小的JSON对象传递给一个新变量,并修改了原始变量(而不是新变量)中的数据,但是新变量的数据也得到了更新。这必须意味着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对象,以便修改原始变量不会修改新变量?

我发现,如果您不使用jQuery而仅对克隆简单对象感兴趣(请参见注释),则可以使用以下内容

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

文献资料

您唯一的选择是以某种方式克隆对象。

请参阅有关如何实现此目标的stackoverflow问题

对于简单的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"在表达式的后面指定了,这实际上覆盖了它。当然,oldObject不会被修改。

本文地址:http://javascript.askforanswer.com/ruhebutongguoyinyongjiangjavascriptduixiangfuzhidaoxinbianliangzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!