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

2018-08-07 08:43:39来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

晒下我的比较浅显的深拷贝,没有考虑原型和循环引用,可以拷贝一些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;
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:斗鱼扩展--让你看到更多内容(七)

下一篇:关闭当前界面