首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将JavaScript对象复制到新的变量中而不是引用?

如何将JavaScript对象复制到新的变量中而不是引用?
EN

Stack Overflow用户
提问于 2013-08-21 21:43:10
回答 1查看 197.6K关注 0票数 184

我编写了一个快速的jsfiddle here,在其中我将一个小的JSON对象传递给一个新变量,并修改来自原始变量(而不是新变量)的数据,但新变量的数据也会更新。这一定意味着JSON对象是通过引用传递的,对吧?

下面是我的快速代码:

代码语言:javascript
复制
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对象的深层副本,这样修改原始变量就不会修改新变量?

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 21:44:51

你唯一的选择就是以某种方式克隆这个对象。

有关如何实现这一点,请参阅this stackoverflow question

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

代码语言:javascript
复制
var newObject = JSON.parse(JSON.stringify(oldObject));

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

代码语言:javascript
复制
// Shallow copy
var newObject = jQuery.extend({}, oldObject);

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

更新2017:我应该提一下,因为这是一个流行的答案,现在有更好的方法来实现这一点,使用更新版本的javascript:

在ES6或TypeScript (2.1+)中:

代码语言:javascript
复制
var shallowCopy = { ...oldObject };

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

请注意,如果extraProp也是oldObject上的一个属性,则不会使用它的值,因为稍后会在表达式中指定extraProp : "abc",这实际上会覆盖它。当然,oldObject不会被修改。

票数 117
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18359093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档