手写一个深拷贝函数

202 阅读1分钟

本篇博客参考了,这篇文章

深拷贝和浅拷贝的一个基本的区别就是:

深拷贝需要开辟新的内存空间,而浅拷贝只是复制引用的地址,并未开辟新的内存空间

1.深拷贝的步骤

深拷贝的步骤如下:

1.递归

2.判断类型

3.检查循环引用(环)

4.不可能拷贝原型 proto

2.深拷贝的代码实现如下所示:

function copyObj(obj){
    let cloneObj;
    //obj是简单数据类型的时候,直接拷贝
    if(obj && typeof obj !== 'object'){
        cloneObj = obj
    }
    //obj如果是对象和数组的时候
    else if(obj && typeof obj === 'object'){
        //检测obj到底是数组还是对象的数据类型
        cloneObj = Array.isArray(obj)?[]:{};
        for(let key in obj){
            if(obj.hasOwnProperty(key)){
                if(obj[key] && typeof obj[key] === 'object'){
                    //若当前元素类型为对象时,递归调用
                    cloneObj[key] = copyObj(obj[key])
                }
                //若当前类型为基本数据类型时候
                cloneObj[key] = obj[key]
            }
        }
    }
    return cloneObj;
}
let str = "hello world"
let arr = [9,3,4,7,8,1,7,2,6]
let myObject = {
    name:"elbert",
    age:18,
    height:"175cm"
}
console.log("copyObj1:",copyObj(str))
console.log("copyObj2:",copyObj(arr))
console.log("copyObj3:",copyObj(myObject))


控制台打印输出结果如下图所示:

image.png