深拷贝与浅拷贝

66 阅读1分钟

一、深浅拷贝

所谓的拷贝就是克隆,将某个对象的内容复制出来,再另外赋值给一个新的对象。

浅拷贝

只能复制对象第一层的属性,即原始类型的数据,不能拷贝引用类型的数据

let stu = {
    name:"小明",
    age:10,
    friends:{
        friendName:"小王",
        toy:[1,2,3,4]
    }
};

//浅拷贝算法
function copyObj(obj){
    let newObj  = {};
    for (let i in obj ){
        newObj[i]  = obj[i]
    }
    return  newObj
}

//调用函数
let newStu  = copyObj(stu)
stu.friends.friendName= "小红"
console.log(stu)
console.log(newStu)

深拷贝

对某一个对象的全部属性完全复制下来。可以使用递归方法或者JSON进行深拷贝

1、递归方法

 //深拷贝
        let teacher = {
            name: "张老师",
            age: 23,
            teachProject: {
                projectName: "语文"
            }
        }
        
        //进行拷贝算法
        function deepCopyObject(obj1) {
            let newObj1 = {};
            for (let i in obj1) {
                if (obj1[i] instanceof Object) {
                    newObj1[i] = deepCopyObject(obj1[i])
                } else {
                    newObj1[i] = obj1[i]
                }
            }
            return newObj1
        }

        let newTeacher = deepCopyObject(teacher)
        console.log(teacher)
        console.log(newTeacher)
        teacher.teachProject.projectName = "Math"
        console.log(teacher)

2、JSON方法

let stu = {
    name:"小明",
    age:10,
    friends:{
        friendName:"小王",
        toy:[1,2,3,4]
    }
};
let stuStr = JSON.stringify(stu)
let newObj = JSON.parse(stuStr)
console.log(newObj)