Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变异克隆对象,也变异原始对象[Javascript]_Javascript_Object_Testing_Jestjs_Mutation - Fatal编程技术网

变异克隆对象,也变异原始对象[Javascript]

变异克隆对象,也变异原始对象[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.

我正在用ES6中的笑话为React组件编写一些测试。在一个测试中,我需要克隆导入的json并对克隆对象进行变异,但是当我对克隆对象进行变异时,原始对象也会发生变异

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对象时,这不是一项昂贵的操作吗?一旦有了数据树,浅拷贝就毫无用处了。