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

相关内容

热门资讯

蜜雪冰城墨西哥首店开业,民众排... 当地时间2月12日,蜜雪冰城墨西哥首店在该国首都墨西哥城的宪法广场开业,吸引许多当地民众前往排队购买...
别再冤枉巧克力了!这些健康真相... 🍫 你是否曾因为想吃巧克力而感到内心挣扎?巧克力,这份承载着甜蜜与祝福的礼物,常常被视为“增肥”的代...
大块手工饼干,半小时搞定,吃一... 用特别简单的方式,做出特别特别好吃的 大大大饼干。 这个饼干很适合配黑咖啡当下午茶,虽然做法巨简单...
千万不能错过!2023家庭房车... 引言 随着旅游方式的多样化,越来越多的家庭选择房车旅行作为探索自然美景和享受天伦之乐的新方式。房车旅...
莱州市旅游攻略3天行程推荐 莱州,一座位于山东半岛西北部的海滨城市,有着丰富的自然资源和深厚的历史文化底蕴。这里有美丽的黄金海岸...