对象里的深拷贝和浅拷贝

51 阅读1分钟

今天整理的笔记之对象里的深拷贝和浅拷贝

```

/** 对象里的深拷贝和浅拷贝 / myFun() { /* 浅拷贝 */ let obj1 = {name:'小龙女',age: 16} let obj2 = obj1 obj2.boyfriend = '杨过' console.log(obj1,'obj1') // {name: '小龙女', age: 16, boyfriend: '杨过'} 'obj1' console.log(obj2,'obj2') // {name: '小龙女', age: 16, boyfriend: '杨过'} 'obj2'

/** 深拷贝 方式一 通过转换对象类型进行深拷贝,这种方式只能用于简单的对象,如果对象里有函数或者属性为undefined或者数组这些就不适用了 / let obj3 = {name:'黄蓉',age: 22} let obj4 = JSON.parse(JSON.stringify(obj3)) obj4.boyfriend = '郭靖' console.log(obj3,'obj3') // {name: '黄蓉', age: 20} 'obj3' console.log(obj4,'obj4') // {name: '黄蓉', age: 20, boyfriend: '郭靖'} 'obj4' /* 深拷贝 方法二 通过闭包方式去解决 一般对象里有较复杂的类型或者不确定对象里有什么的时候就用这个 */ let obj5 = { name:'赵敏', age: 22, sister: undefined, rivalInLoveList: ['周芷若','小招','珠儿'], fun:() => { console.log('这里是对象里的函数') } } let obj6 = this.deppFn(obj5) obj6.boyfriend = '张无忌' obj6.rivalInLoveList[0] = '恩断义绝→峨眉掌门人' console.log(obj5,'obj5') console.log(obj6,'obj6') },

/** 闭包 / deppFn(obj) { let targetObj = obj instanceof Array ? [] : {} for (let key in obj) { if(obj.hasOwnProperty(key)) { /* hasOwnProperty用来检测属性是否为对象的自有属性 / let value = obj[key] /* 对应的value值 / /* 判定value是否为数组or对象 / if(value instanceof Array || value instanceof Object) { /* 递归 赋值 */ targetObj[key] = this.deppFn(value) } else { targetObj[key] = value } } } return targetObj }