JS引用类型
/**
 * 引用类型赋值传递的是堆引用
 * 修改赋值对象会修改堆数据
 */
const obj1 = {
  a: 1,
  b: 2,
};

const obj2 = obj1;

obj2.a = 11;
obj2.c = 13;
delete obj2.b;

// obj1输出:{a: 11, c: 13}

/**
 * 对象的对象也会是一样的结果
 * 在后端数据对接中,常用到此场景
 */
const obj1 = {
  child: {
    a: 1,
    b: 2,
  },
};

const obj2 = obj1.child;

obj2.a = 11;
obj2.c = 13;
delete obj2.b;

// obj1输出:{child:{a: 11, c: 13}}

/**
 * 应用场景举例
 * 修改列表中的指定对象
 */
const obj1 = [
  {
    id: 1,
    content: 'somethin1',
  },
  {
    id: 2,
    content: 'something2',
  },
];

obj1.forEach((item) => {
  const temp = item;
  if (temp.id === 2) {
    temp.content = 'something updated';
  }
});

// obj1输出 {...{id:2,content:'something updated'}

/**
 * 如何避免赋值对象修改原对象?
 * 可以使用Object.assign({},obj1) 或者 展开操作符
 * 常在reducer里使用到
 */
const obj1 = {
  a: 1,
  b: 2,
};

// const obj2 = { ...obj1 };
const obj2 = Object.assign({}, obj1);

obj2.a = 11;
obj2.c = 13;
delete obj2.b;

// obj1输出:{a: 1, b: 2},没有被修改
© 2022  Arvin Xiang
Built with ❤️ by myself