实现简单的深拷贝
实现对象或数组的深拷贝
实现深拷贝的思路:
1.其中对象所拥有的属性可能是基本类型,也可能为引用类型
2.若属性的值为基本数据类型,可能是number、boolean、string、null、undefined、Symbol,则可以直接用赋值操作来实现拷贝
3.若属性的值为引用数据类型,可能是object、array、function,其中值为object或array时,需要用递归来实现拷贝
function deepClone (obj) {
// 判断不是object或array时,直接返回原值进行赋值操作
if (typeof obj !== 'object' || obj == null) {
return obj
}
let res
if (obj instanceof Array) {
res = []
} else {
res = {}
}
for (let i in obj) {
// 判断属性为对象本身的属性,而不是原型链上的属性
if (obj.hasOwnProperty(i)) {
res[i] = deepClone(obj[i])
}
}
return res
}