综合手写深拷贝,浅拷贝
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
