以正确的方式删除对象上的属性

时间:2017-01-22 20:10:36

标签: javascript

var actual = { first: 1, second : 2 }
var copy = actual;

delete copy.first;

当我控制台记录副本时,它没有第一个属性,但是当我控制日志实际时,即使该对象也没有第一个属性。

有人可以解释一下这里发生了什么吗?以及如何避免这种情况?

预期:

actual: { first: 1, second : 2 }
Copy: { second: 2 }

P.S:我知道我可以直接在复制对象上分配第二个属性而不复制,这只是一个例子。我正在处理非常大的物体。所以我必须复制然后删除属性而不影响实际对象。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用JSON.stringify()JSON.parse()或@elclanrs建议,Object.assign()

var actual = { first: 1, second : 2 }
var copy = JSON.parse(JSON.stringify(actual));
delete copy.first;

var actual = { first: 1, second : 2 }
var copy = Object.assign({}, actual);
delete copy.first;

答案 1 :(得分:1)

您没有制作该对象的副本,只是复制了该引用。 如果要复制对象,请考虑使用ES6 Object.assignlink)或lodash的assignlink)。

Object.assign将对象作为参数。对象的所有属性都复制到参数列表中的第一个对象,并返回对第一个对象的引用。

var actual = { first: 1, second : 2 };
var copy = Object.assign({}, actual);

delete copy.first;