编辑代码

const obj = {
    name:'obj.name',
    un:undefined,
    nu:null,
    sy:Symbol(123),
    say:function(){
        console.log(this.name);
    },
    reg:/\d{6}/g,
    date:new Date(),
    child:{
        name:'child.name'
    }

};
obj.child.child = obj.child

function deepClone(target,map=new WeakMap()){
    if(!isObject(target)) return target
    if(map.has(target)) return map.get(target)
    let res = Array.isArray(target)?[]:{}
    map.set(target,res)
    for(let i in target){
        if(target.hasOwnProperty(i)){
            if(isObject(target[i])){
                res[i] = deepClone(target[i],map)
            }else{
                res[i]=target[i]
            }
        }
    }
    return res

}
function isObject(obj){
    return Object.prototype.toString.call(obj)==='[object Object]'||Object.prototype.toString.call(obj)==='[object Array]'
}




let obj2 = deepClone(obj);
console.log(obj);
console.log(obj2);
console.log(obj2.sy === obj.sy)
obj2.name = 'obj2.name';
obj2.say();