Skip to main content

深浅克隆

复制地址

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;
}
// 缺点:深克隆浪费内存,无法适应高频率更新的场景