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

Mutates a cloned object, mutates the original object too [Javascript]

我正在用 ES6 中的 Jest 为 React Components 编写一些测试。在一个测试中,我需要克隆一个 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 只做浅层克隆。这意味着内部对象仍然指向原始对象。

要进行深度克隆,您可以使用 Lodash or immutability-helper

您可以使用此功能复制对象属性:

const copyObj = (obj) => Object.keys(obj).map(k => [k, obj[k]]).reduce((m, [k, v]) => {m[k] = v; return m}, {})

jsfiddle example