/**
* 引用类型赋值传递的是堆引用
* 修改赋值对象会修改堆数据
*/
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},没有被修改