编辑代码

// 判断是否是array、和object
const isObject = (obj) => {
    return typeof obj === 'object' && obj !== null;
}

function deepClone(obj) {
    // 判断是array 还是object
    const newObj = obj instanceof Array ? [] : {};

    // 遍历每一个key
    for(let key in obj) {
        // 获取值
        const item = obj[key];
        // 如果是object那继续遍历,不是直接返回
        newObj[key] = isObject(item) ? deepClone(item) : item
    }

    // 返回值
    return newObj;
}

const a = {
    name: '我是a'
}

const arr = [1, 2, {
    name: '我是arr',
    list: [1,2,3]
}]

const copy_a = deepClone(a);
a.name = 'gaibianhoude a'
console.log('copy_a---', copy_a)


const copy_arr = deepClone(arr);
arr[2].name = 'gaibianhoude rra'
console.log('copy_arr---', copy_arr)

console.log('a---0', a)
console.log('arr---0', arr)