SOURCE

function judgeType(data) {
    const toString = Object.prototype.toString //判断数据类型的方法
    const map = {
        '[object Boolean]': 'boolean',
        '[object Number]': 'number',
        '[object String]': 'string',
        '[object Function]': 'function',
        '[object Array]': 'array',
        '[object Date]': 'date',
        '[object RegExp]': 'regExp',
        '[object Undefined]': 'undefined',
        '[object Null]': 'null',
        '[object Object]': 'object'
    }
    const dataType = toString.call(data) //得到data数据类型
    return map[dataType]
}

function deepClone(data) {
    const type = judgeType(data)
    let obj
    if (type === 'object') {
        obj = {}
    } else if (type === 'array') {
        obj = []
    } else {
        return data
    }
    if (type === 'object') {
        for (let key in data) {
            obj[key] = deepClone(data[key]) //其值可能还是复杂数据类型,那么对其继续进行深拷贝,这里就涉及到了递归
        }
    } else if (type === 'array') {
        for (let i = 0; i < data.length; i++) {
            obj.push(deepClone(data[i]))
        }
    }
    return obj
}

const obj = {name: 'wjt', age: 18, work: {}}
console.log(deepClone(obj) === obj)
console 命令行工具 X clear

                    
>
console