JS深拷贝/深克隆(面试用)

晒下我的比较浅显的深拷贝,没有考虑原型和循环引用,可以拷贝一些js原生类型,用于面试用。

function deepClone(obj){
    if(Object.prototype.toString.call(obj)==="[object Function]"){
        let str=obj.toString();
        /^function\s*\w*\s*\(\s*\)\s*\{(.*)/.test(str);
        let str1=RegExp.$1.slice(0,-1);
        return new Function(str1);
    }
    if(!obj||typeof obj!=="object")
        return obj;
    if(Object.prototype.toString.call(obj)==="[object Date]")
        return new Date(obj);
    if(Object.prototype.toString.call(obj)==="[object RegExp]")
        return new RegExp(obj);
    let cloneObj=Array.isArray(obj)?[]:{};
    for(let i in obj){
        if(obj.hasOwnProperty(i)){
            cloneObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i];
        }
    }
    return cloneObj;
}

 

posted @ 2018-08-07 13:14  汕大小吴  阅读(747)  评论(0编辑  收藏  举报