js深浅拷贝
创始人
2025-05-28 23:07:15

1、浅拷贝

const obj = {name:"李旭亮",age:20,family:{baby:'yll',}
}
console.log(obj);
// 浅拷贝:拷贝的是地址
const o={...obj};
o.age=200;
console.log(o.age);//200
console.log(obj.age);//20 
// ***********************
o.family.baby='xxx';
console.log(obj.family.baby);//xxx 里面的内容仍然会改变

在这里插入图片描述

2、深拷贝

首先浅拷贝和深拷贝只针对引用类型
深拷贝: 拷贝的是对象,不是地址

常见方法:
1.通过递归实现深拷贝
2. lodash/cloneDeep
3.通过JSON.stringify()实现

2.1、通过递归实现深拷贝

函数递归:
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数

  • 简单理解:函数内部自己调用自己,这个函数就是递归函数
  • 递归函数的作用和循环效果类似
  • 由于递归很容易发生“栈溢出”错误 (stack overflow),所以必须要加退出条件 return

在这里插入图片描述

// 函数递归实现时间输出
function gitTime() {document.querySelector('div').innerHTML=new Date().toLocaleString();setTimeout(gitTime,1000);
}
gitTime();

在这里插入图片描述

const obj = {name: "李旭亮",age: 20,family: {baby: 'yll',}
}
let o = {};
function deepCopy(newObj, oldObj) {for (const k in oldObj) {if (oldObj[k] instanceof Array) {console.log(oldObj[k]);newObj[k] = [];deepCopy(newObj, oldObj);} else if (oldObj[k] instanceof Object) {newObj[k] = {};deepCopy(newObj[k], oldObj[k])} else {newObj[k] = oldObj[k];}}
}
deepCopy(o, obj);
console.log(o);
o.family.baby = 'xxx';
console.log(o.family.baby);
console.log(obj.family.baby);

在这里插入图片描述

2.2、 lodash/cloneDeep



2.3、 通过JSON实现

const obj = {name: 'lxl',age: 18,books: ['JavaScript', '语文'],family: {baby: 'xxx',}
}
const newObj = JSON.parse(JSON.stringify(obj));
// 将新对象的baby改名
newObj.family.baby = 'lxl';
// 观察旧对象的baby有没有变化
console.log(obj.family.baby);//xxx

相关内容

热门资讯

周二非洲杯焦点战:卫冕冠军塞内... 非洲杯小组赛再燃战火!北京时间周二晚间,一场备受瞩目的对决即将上演——卫冕冠军塞内加尔强势亮相,对阵...
400人同吃一锅炒面!江西冬至... 你发现没?冬天最让人惦记的,不是暖气,是那一口热腾腾的炒面 冬至这天,江西省南昌市安义县洲上村幸...
电饭煲焖饭,饭菜一锅出,太香了... 广味腊肠焖饭 大米400g、广味腊肠1根、胡萝卜2根、土豆2个、干香菇若干、豌豆适量、蚝油适量、生抽...
越是降温吃这8道菜越合适,食材... 降温了,给家人准备上热气腾腾、营养丰富的美食再合适不过了。特别是家里有小孩的,更要保证孩子摄入足够的...
大雪后不要总给娃吃白菜豆腐!八... 大雪过后,天气愈发寒冷干燥,孩子的身体需要更多的营养来抵御寒冬。别总盯着白菜豆腐啦,下面这八道黄金菜...