SOURCE

function deepClone(target, map = new Map()) {
    if (map.get(target)) {
        return map.get(target)
    }
    if (typeof target === 'object' && target !== null) {
        const copyTarget = Array.isArray(target) ? [] : {}
        map.set(target, copyTarget)

        for (key in target) {
            if (target.hasOwnProperty(key)) {
                copyTarget[key] = deepClone(target[key], map)
            }
        }
        return copyTarget
    } else {
        return target
    }

}

const obj = {
    a: [1,2,3],
    b: 4,
    c: {
        d: {
            e: 5
        }
    }
}

const copyObj = deepClone(obj)
console.log(copyObj)
console 命令行工具 X clear

                    
>
console