针对object 和 array,浅拷贝只复制一层对象的属性(如果是个对象,仅复制储存的地址)。深拷贝会递归复制所有层级。
深拷贝在计算机中开辟了一块内存地址用于存放复制的对象,而浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。
深浅拷贝 的主要区别就是:复制的是引用(地址)还是复制的是实例。
浅拷贝:
Object.assign(target, source);
assign还可以合并对象
深拷贝:
1、JOSN.parse(JOSN.stringify(obj));
2、递归复制:
function deepCopyTwo(obj) {
let objClone = Array.isArray(obj) ? [] : {};
if (obj && typeof obj == 'object') {
for (const key in obj) {
//判断obj子元素是否为对象,如果是,递归复制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepCopyTwo(obj[key]);
} else {
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
return objClone;
}
https://www.jianshu.com/p/fa97a0f08c37
https://www.cnblogs.com/guorange/p/7134310.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign