1.做前端开发时遇到一个对象拷贝的问题,当时我把需要拷贝的对象使用Object.assign方法复制了一份,但是再对拷贝出来的对象处理后出现一些问题,如下:
const originalObject = {
name: 'John',
age: 30,
type:{
fru:"我的原始对象"
}
};
//拷贝的对象
const copiedObject = Object.assign({}, originalObject);
copiedObject.name="Jack"
copiedObject.type.fru="复制的对象"
console.log(copiedObject,originalObject)//
上面的打印出来的复制对象与原始对象有点不一样,原始对象name复制成功,type却随着复制对象的改变而发生了改变
2.原因说明
查过资料得知:assign拷贝复制对象的时候,对于简单的数据类型(num,string)等是深拷贝,而对于对象里的引用数据类型是浅拷贝,所以本质上Object.assign是浅拷贝,后来用了深拷贝方法Json.Parse解决;
const originalObject = {
name: 'John',
age: 30,
type:{
fru:"我的原始对象"
}
};
const copiedObject = JSON.parse(JSON.stringify(originalObject));
copiedObject.name="Jack"
copiedObject.type.fru="复制的对象"
console.log(copiedObject,originalObject)//两个对象互相不影响