Skip to content

深拷贝和浅拷贝

January 12, 2023 | 10:32 PM

深拷贝和浅拷贝

浅拷贝和深拷贝都是创建一份数据的拷贝。

JS 分为原始类型和引用类型,对于原始类型的拷贝,并没有深浅拷贝的区别,我们讨论的深浅拷贝都只针对引用类型。

手写深拷贝(核心为递归)

function deepClone(obj={}){
    //如果obj不为数组或对象,或者为空,则返回传入的值
    if(typeof obj!=='obejct'||obj==null){
        return obj
    }
    let result;
    if(obj instanceof Array){
        result=[]//将result变成数组格式
    }else{
        //否则就变为对象
        result={}
    }
    for(let key in obj){
        //进行递归,层层嵌套拷贝(如果没有这层递归,直接result[key]=obj[key]就是浅拷贝了)
        if(obj.hasOwnProperty(key)){//指示对象自身属性中是否具有指定的属性
            result[key]=deepClone(obj[key])
        }
    }
    return result
}

代码演示:https://stackblitz.com/edit/js-ku1htd?file=index.js