美文网首页
一根烟的时间带你了解JS深拷贝

一根烟的时间带你了解JS深拷贝

作者: 一眼万年的星空 | 来源:发表于2022-11-26 12:40 被阅读0次
    /*
     * 深拷贝
     */
    const obj1 = {
        age: 20,
        name: 'xxx',
        address: {
            city: 'beijing'
        },
        arr: ['a', 'b', 'c']
    }
    
    const obj2 = deepClone(obj1)
    obj2.address.city = 'shanghai'
    obj2.arr[0] = 'a1'
    console.log(obj1.address.city)
    console.log(obj1.arr[0])
    console.log(obj2.address.city)
    console.log(obj2.arr[0])
    
    /*
     * 深拷贝
     * @param {Object} obj 要拷贝的对象
     */
    function deepClone(obj = {}) {
        if (typeof obj !== 'object' || obj == null) {
            // obj 是 null ,或者不是对象和数组,直接返回
            return obj
        }
    
        // 初始化返回结果
        let result
        if (obj instanceof Array) {
            result = []
        } else {
            result = {}
        }
    
        for (let key in obj) {
            // 保证 key 不是原型的属性
            if (obj.hasOwnProperty(key)) {
                // 递归调用!!!
                result[key] = deepClone(obj[key])
            }
        }
    
        // 返回结果
        return result
    }
    

    相关文章

      网友评论

          本文标题:一根烟的时间带你了解JS深拷贝

          本文链接:https://www.haomeiwen.com/subject/hvhcfdtx.html