综合手写深拷贝,浅拷贝
let obj1 = {
name: '赵敏',
age: 11,
hobbit: {
eat: '香蕉'
}
}
let obj2 = deepClone(obj1)
obj2.name = '张无忌'
obj2.hobbit.eat = '苹果 '
console.log('obj1', obj1)
console.log('obj2', obj2)
function deepClone(obj = {}) {
// 如果是普通类型,直接返回
if (typeof obj !== 'object' || typeof obj == null) {
return obj
}
let result = Array.isArray(obj) ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key])
}
}
return result
}
代码分解
- 如果拷贝变量是 let obj = 1 (基本数据类型)// 简单数据类型,直接返回。因为这不涉及拷贝,就是赋值好吧….
那怎么找判断基本数据类型呢, typeof 基本类型都会返回,复杂类型都会返回object,但是有一个特殊的null