深浅拷贝

一、深浅拷贝区别

1.浅拷贝:拷贝的是对象的指针(地址),修改原对象内容,拷贝的对象也会发生变化

2.深拷贝:整个对象拷贝到内外一个内存中,修改内容互不影响

二、浅拷贝的实现

创建一个新的对象,遍历需要克隆的对象,将需要克隆对象的属性依次添加到新对象上
function clone(target) {
let cloneTarget = {};
for (const key in target) {
cloneTarget[key] = target[key];
}
return cloneTarget;
};

三、深拷贝的实现

如果是深拷贝的话,考虑到要拷贝的对象是不知道有多少层深度的,可以用递归来解决问题
1.如果是引用类型,创建一个新的对象,遍历需要克隆的对象,将需要克隆对象的属性执行深拷贝后依次添加到新对象上。
2.如果是原始类型,无需继续拷贝,直接按浅拷贝方式赋值
function deepClone(obj) {
let newObj={};
for(let i in obj){
if(obj[i] instanceof Object){
newobj[i]=deepClone(obj[i]) //递归拷贝
}
else{
newobj=obj[i];
}
}
return newobj
}

四、深拷贝最简单写法

JSON.parse(JSON.stringify(obj));
其中:
JSON是数据格式,用于前后台数据交互

JSON.stringify(obj):用于将一个对象变成字符串

JSON.parse():将json字符串变为对象

posted @ 2022-04-15 14:51  花村店长  阅读(81)  评论(0)    收藏  举报