深拷贝函数

function deepClone(obj = {}) {
    // 一般拷贝的是对象或者数组 
    if (typeof obj !== 'object' || typeof obj !== 'array') {
        return obj
    }
    let res
    if (typeof obj === 'array') {
        res = []
    } else if (typeof obj === 'object') {
        res = {}
    }
    for (let key in obj) {
        // 判断是否属于自己的属性,不是原型的 
        if (obj.hasOwnProperty(key)) {
            res[key] = deepClone(obj[key])
        }
    }
    return res
}
const obj1 = {
    a: 1,
    b: 2,
    c: {
        x: 10,
        y: {
            z: 20
        }
    }
}
console.log(deepClone(obj1))
// {a: 1, b: 2, c: {…}}
// a: 1
// b: 2
// c:
// x: 10
// y:
// z: 20
// __proto__: Object
// __proto__: Object
// __proto__: Object

测试 Object.assign 不是深拷贝

const obj1 = {  
    a: 1,  
    b: 2,  
    c: {  
        x: 10,  
        y: {  
            z: 20  
        }  
    }  
}  
const obj2 = Object.assign({}, obj1)  
obj1.c.x = 30  
console.log(obj2.c.x) // 30

标签: none

添加新评论