深浅拷贝
一、深浅拷贝区别
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字符串变为对象

浙公网安备 33010602011771号