通俗的说浅拷贝拷贝的是地址,深拷贝则是在内存中再开辟一块空间来和复制一份和原来一样的对象。
浅拷贝
方式1:
// 第1种方式,使用forin
let obj2 = {};
for(const key in obj1) {
obj2[key] = obj1[key];
}
方式2:
// 第2种方式,使用Object.assign方法
let obj2 = Object.assign({}, obj1);
方式3:
// 第3种方式,使用展开语法
let obj2 = { ...obj1 };
深拷贝
function copy(obj) {
let res = obj instanceof Array ? [] : {};
for (const [k, v] of Object.entries(obj)) {
res[k] = typeof v == 'object' ? copy(v) : v;
}
return res;
}
let obj2 = copy(obj1);
深拷贝则是如果碰到object类型就递归拷贝引用对象的每个属性。