本方法只适用于大部分情况下,没有考虑symbol,set,map,函数柯里化等。
function deepClone(obj = {}) {
// 判断传入的 obj 是不是数组或对象,不是直接返回 obj
if (typeof obj !== 'object' || obj == null) {
return obj;
}
let result;
// 判断是不是数组
if (obj instanceof Array) {
result = [];
} else {
result = {};
}
for (let key in obj) {
// hasOwnProperty()方法:检测一个属性是否是对象的自有属性
if (obj.hasOwnProperty(key)) {
// 递归调用
result[key] = deepClone(obj[key]);
}
}
return result;
}
个人项目中使用,勿喷