从一个对象删除的JavaScript对象将从两个对象中删除

时间:2017-09-29 08:04:12

标签: javascript

这是一个有点愚蠢的问题,但我注意到,当我,我们说声明一个对象

const test = {"foo": 1, "bar": 2}
console.log(test)

然后声明新变量,并给它第一个对象的值

const test2 = test;

从第二个变量中删除密钥,它将从两个变量中删除。

delete test2.foo
console.log(test2)
console.log(test)

有人可以解释为什么这是一件事,以及如何避免这个问题?

https://jsfiddle.net/eLxkbx15/1/

2 个答案:

答案 0 :(得分:1)

执行const test2 = test;时,您不是在创建新对象,而只是复制对同一对象的引用。如果你想创建一个全新的对象,你应该做一个浅的克隆:

const test2 = Object.assign({}, test);

然后你可以删除:

delete test2.user;

答案 1 :(得分:0)

问题是您正在分配引用而不是将对象复制到新变量。因此,当您删除该属性时,它将从两者中删除。

您可以使用ExecuteScalar 或者您可以使用第三方库,例如lodash的Object.assign()