重点:递归、isArray、typeof、hasOwnProperty
let target = [ '123', 1, null, [1,2], {name: 'a'}, function a(){ return 1; }, [{a: 1}] ];
// 深度拷贝
function deepClone(obj){
let newObj = Array.isArray(obj) ? [] : {}; // 数组或者对象
if(obj && typeof(obj) === 'object'){ // objec,证明对象里还有对象,null也是objec,记得排除
for(k in obj){
if (obj.hasOwnProperty(k)){
console.log(k);
// 再判断obj[key]是不是对象
if (obj && typeof(obj[k]) === 'object') { // 是的话证明有对象
newObj[k] = deepClone(obj[k])
}else {
newObj[k] = obj[k];
}
// 三元表达式
newObj[k] = (obj && typeof(obj[k]) === 'object') ? deepClone(obj[k]) : obj[k];
}
}
}
return newObj;
};
let i = deepClone(target);
console.log('最终的结果',i);
判断条件很关键,因为要使用递归,一定要考虑判断数组里有数字或者对象的情况 js基础较差,马上加强