创建新对象时,为什么要更新旧对象

When creating a new object why does it update the old one?

本文关键字:对象 为什么 更新 新对象 创建      更新时间:2023-09-26

当我从现有对象创建一个新对象,然后附加一个新属性时,它为什么要更新以前的属性?

他们的解决方案是否不需要对我的代码进行太多更改?

这是我的例子jsfiddle。

var data = [
  {
    "id" : 1,
    "name" : "carrot",
    "price" : 0.10,
    "stock" : 12,
    "bgLocation" : "-1px -54px"
  },
  {
    "id" : 2,
    "name" : "fennel",
    "price" : 1.20,
    "stock" : 6,
    "bgLocation" : "-146px -52px"    
  }
]
var item = data[0];
item.added = 4;
//data[0] should not contain the added attribute.
$('body').append(JSON.stringify(data[0]));

变量数据只是指向同一对象的引用。通过呼叫。

var item = data[0];

您不是在复制对象,而是在对象上创建一个新的引用,该引用使用data[0]进行寻址。因此

item.added = 4;

将更改对象bot vraiables指向。

此处

如何正确克隆JavaScript对象?

是关于如何在javascript中复制对象的一些详细信息。

因为您得到的只是对原始对象的引用,而不是副本。因此,如果更新此引用,则是在隐式更新原始对象。

您可以使用$.extend():轻松创建副本

var item = $.extend({}, data[0]);

演示