1

69 阅读1分钟
   function deepClone(obj) {        if (!/^object$/i.test(typeof obj)) return obj; //基本数据类型或者函数,直接return        let constructor = obj.constructor;        if (/^(date|regexp)$/i.test(constructor)) return new constructor(obj); //日期或正则对象,特殊处理        let clone = new constructor();      //数组或对象,直接生成实例        for (let key in obj) {          if (!obj.hasOwnProperty(key)) break;      //非自有属性,说明已经进入原型查找,直接跳出循环(自有属性中只有某些特殊的属性如length是不可枚举,内置类公共属性除自定义外大部分都不可枚举)          clone[key] = deepClone(obj[key]);        }        return clone      }     let newObj=deepClone({       a:[1,2,3],       date:new Date(),       b:1,       c:{         d:2       }     })     console.log(newObj)