手写 JS深拷贝
创始人
2024-03-31 04:04:03
0

一、为什么需要深拷贝?

深拷贝也是拷贝的一种。

拷贝无非就是值类型或引用类型的复制。

值类型

let a = 100;
let b = a;a = 200;console.log(b) // b = ?

b = ? ,毋庸置疑 b = 100

再来看看引用类型

const obj1 = {x: 100,y: 200
}
const obj2 = obj1
obj2.x  =102console.log(obj1) // obj1 = ?

答案是 obj2 = { x: 102, y: 200 }

值类型和引用类型分配的地址不一样,如下图:

在这里插入图片描述
在这里插入图片描述
引用类型他们的指向地址一致,所以修改其中一个,指向该地址的变量会随着变化。

二、深拷贝

深拷贝就是拷贝引用类型,让他们不会互相影响。

方式一:(推荐)

使用 JSON 提供的parse 和 stringify 函数来进行深拷贝

JSON.parse(JSON.stringify(obj1))

方式二:

这个方法的核心就是使用递归将变量都变成值类型返回。

/*** 深拷贝* @param {Object} obj 要拷贝的对象*/
function deepClone(obj = {}) {// obj 是 null 或者不是对象和数组,直接返回if(typeof obj !== 'object' || obj === null) {return obj}// 初始化返回结果let resultif(obj instanceof Array) {result = []} else {result = {}}for (let key in obj) {// 保证key 不是原型的属性if (obj.hasOwnProperty(key)) {// 递归调用(重点)result[key] = deepClone(obj[key])}}return result}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...