// 先判断参数是否为对象,如果不是对象直接返回。
// 如果是数组,遍历数组进行递归拷贝,
// 如果是对象,遍历对象属性进行递归拷贝。
// 其中,需要注意的是,
// 需要使用 hasOwnProperty 进行判断是否为对象自身的属性,避免出现原型链上的属性也被拷贝的情况。
function deepClone(obj) {
// 判断是否为对象
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 初始化返回结果
let result;
// 判断是否为数组
if (Array.isArray(obj)) {
result = [];
for (let i = 0; i < obj.length; i++) {
result[i] = deepClone(obj[i]);
}
} else {
result = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
}
return result;
}
console