SOURCE

    // 为什么使用深拷贝:为了在改变新数组的时候,不影响原数组

function deepClone(obj){
    // [ ] => Array (基类) { } => Object	
    var newObj = obj.constructor === Array ? [ ] : { };  //判断类型是数组还是对象(注意这里的Array不需要加引号)
    for(let item in obj){
        if(obj.hasOwnProperty(item)){  // 判断obj是否有当前属性
            // item => 3(基本、对象、数组)
            if(obj[item] && typeof obj[item] === 'object'){  // 引用数据类型
                // 判断是数组或者对象(维护层代码可去掉)
                // newObj[item] = obj[item].constructor === Array ? [] : {};
                newObj[item] = deepClone(obj[item]) // 递归
            } else{ // 基本数据类型
                newObj[item] = obj[item]  //直接赋值
            }
        }
    }
    return newObj;
} 

let arr = [1,2,3,4]
let res = deepClone(arr)
res[0] = 100
console.log(arr, res)
console 命令行工具 X clear

                    
>
console