深浅克隆
复制地址
let obj2 = obj1
浅克隆
let obj2 = {...obj1}
let obj2 = Object.assign({},obj1)
深克隆
let obj2 = JSON.parse(JSON.stringify(obj1))
// 缺点:函数 日期 正则会出现问题
function deepClone(obj){
if(obj === null) return null;
if(typeof obj !== 'object') return obj;
if(obj instanceof RegExp){
return new RegExp(obj);
}
if(obj instanceof Date){
return new Date(obj);
}
//使得克隆的结果和之前保持相同的所属类
let newObj = new obj.constructor;
for(let key in obj){
if(obj.hasOwnProperty(key)){
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}
// 缺点:深克隆浪费内存,无法适应高频率更新的场景