实现一个深拷贝

简单版:

const newObject = JSON.paese(JSON.stringfy(oldObj))
复制代码

局限性:

  • 无法实现对函数、正则(RegExp)等特殊对象的克隆

  • 不会抛弃的对象的constructor,所有的构造函数都会指向Object

  • 对象有循环引用会报错

    const a = {val:2};
    a.target = a;
    复制代码

    拷贝a会出现系统栈溢出,因为出现了无限递归的情况。

够用版:

function deepClone(obj) {
    if(typeof obj !== object || obj === null) {
        return obj
    }
    let newObj = {}
    if (Array.isArray(obj)) { // 判断为数组
        newObj = []
    }
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = deepClone(obj[key]) // 是对象则深度遍历,不是对象则直接返回
        }
    }
 
    return newObj
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享