变异克隆对象,也变异原始对象[Javascript]
我正在用ES6中的笑话为React组件编写一些测试。在一个测试中,我需要克隆导入的json并对克隆对象进行变异,但是当我对克隆对象进行变异时,原始对象也会发生变异变异克隆对象,也变异原始对象[Javascript],javascript,object,testing,jestjs,mutation,Javascript,Object,Testing,Jestjs,Mutation,我正在用ES6中的笑话为React组件编写一些测试。在一个测试中,我需要克隆导入的json并对克隆对象进行变异,但是当我对克隆对象进行变异时,原始对象也会发生变异 import obj from './object.json'; // obj = { name: 'someName' } describe('Testing a component', () => { it('Some testing', () => { const obj2 = Object.
import obj from './object.json'; // obj = { name: 'someName' }
describe('Testing a component', () => {
it('Some testing', () => {
const obj2 = Object.assign({}, obj); //Clone the object
obj2.name = 'otherName'; // Muatate the object
console.log(obj); // { name: 'otherName' }
});
})
为什么会这样?为什么当我变异克隆对象时,原始导入的对象也会变异?
object.assign
只执行浅克隆。这意味着内部对象仍指向原始对象
要进行深度克隆,您可以使用或。您可以使用此功能复制对象属性:
const copyObj = (obj) => Object.keys(obj).map(k => [k, obj[k]]).reduce((m, [k, v]) => {m[k] = v; return m}, {})
深克隆菌多年来一直在把我的头发拔出来-无法理解为什么Object.assign仍然允许原始变量发生突变!谢谢你救了我的命!我知道您需要进行深度复制,但每次需要映射多级javascript对象时,这不是一项昂贵的操作吗?一旦有了数据树,浅拷贝就毫无用处了。