1、浅拷贝:就是重新分配一块内存,创建一个新对象,但里面的元素是对原对象各个元素的引用
。
2、 深拷贝:重新分配一块内存,创建一个新对象,并将原对象的元素以递归的方式,通过创建新的子对象拷贝
到新对象中,与原对象没有任何关联
。
手写浅拷贝
function shallowClone(obj) {
if (!obj || typeof obj !== 'object') return;
let newObj = obj.isArray ? [] : {};
for(let k in obj) {
if (obj.hasOwnProperty(k)) {
newObj[k] = obj[k];
}
}
return newObj;
}
手写深拷贝
function deepClone(obj) {
if (!obj || typeof obj !== 'object') return;
let newObj = obj.isArray ? [] : {};
for(let k in obj) {
if (obj.hasOwnProperty(k)) {
newObj[k] = obj[k].isArray ? deepClone(obj[k]) : obj[k];
}
}
return newObj;
}