关于javascript:深度克隆对象

实现一

function deepClone(obj){
    var newObj=obj instanceof Array ? [] : {};
    
    for(let key in obj){
        newObj[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
    }
    
    return newObj
}

实现二
思考到内置包装对象Date、RegExp

function deepClone(obj){
    if(obj === null){
        return obj
    }

    if(typeof obj !== 'object'){
        return obj
    }
    
    if(obj instanceof Date){
        return new Date(obj)
    }
    
    if(obj instanceof RegExp){
        return new RegExp(obj)
    }
    
    // 非null状况下的typeof obj === 'object'解决形式
    var newObj=new obj.constructor;
    
    for(let key in obj){
        newObj[key]=deepClone(obj[key]);
    }    
    
    return newObj
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理