function deepclone(obj) {
if (typeof obj !== 'object' || obj == null) {// 排除掉基本数据类型
return obj
}
let arr;//创建一个变量
if (obj instanceof Array) { //判断传递下来的值是数组或者是对象
arr = []
} else {
arr = {}
}
//for in 循环obj数组或者 obj对象
for (let key in obj) {
//保证key不是原型属性
if (obj.hasOwnproperty(key)) {
//deepclone()递归调用,万一obj[key]还是引用数据类型
arr[key] = deepclone(obj[key])
}
}
return arr //返回结果
}
深拷贝和浅拷贝的区别
1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”