SOURCE

function deepClone(target) {
    let result;
    // 是对象
   if ( target instanceof Object) {
       // 是数组
       if (Array.isArray(target)) {
           result = [];
           for (let i in target) {
               result.push(deepClone(target[i]));
           }
       } else if (target === null) {
           // 判断如果当前的值是null的话;直接赋值为null
           result = null;
       } else if (typeof target === RegExp) {
           // 是正则
           result = target;
       } else {
            // 否则是普通对象
            result = {};
            for (let i in target) {
                result[i] = deepClone(target[i]);
            }
        } 
   } else {
       // 如果不是对象的话,就是基本数据类型,那么直接赋值
       result = target;
    }
    // 返回最终结果
    return result;
}

let obj1 = {
        a: {
            c: /a/,
            d: undefined,
            b: null
        },
        b: function () {
            console.log(this.a)
        },
        c: [
            {
                a: 'c',
                b: /b/,
                c: undefined
            },
            'a',
            3
        ]
    }
    let obj2 = deepClone(obj1);
    console.log(JSON.stringify(obj2));
console 命令行工具 X clear

                    
>
console