function deepClone(obj){
function isObj(o){
return (typeof o === 'object' || typeof o === 'function') && o !== null
}
if(!isObj(obj)) {throw new Error('不是对象')}
var isArray = Array.isArray(obj)
var newObj = isArray? [...obj]: {...obj}
Object.getOwnPropertyNames(newObj).forEach( key =>{
newObj[key] = isObj(obj[key]) ? deepClone(obj[key]) : obj[key]
})
return newObj
}
let obj = {
a: [1, 2, 3],
b: {
c: 2,
d: 3
}
}
let newObj = deepClone(obj)
newObj.b.c = 1
console.log(obj.b.c) // 2