深拷贝

白月光在照耀,你才想起她的好 ------即将拥有八块腹肌的程序员

使用深拷贝必须要知道他的使用场景,一般在多人开发的时候对于一个公用的数据,再不确定改变它是否会对其他人或者后面的开发产生影响的时候,这个时候深拷贝就显得尤其重要了。

一般深拷贝都是对引用数据类型的使用,因为这跟数据存储有关系。

这里就要引入基本数据类型和引用数据类型的概念了。

基本数据类型:number,string,boolean,null,undefined,symbol还有BigInt(这个不太熟悉放在最后了)

引用数据类型:object,array,fuction,data等

基本数据类型名跟值都储存在栈中

比如  let A = 1;栈会开辟一个内存用来储存  A和它的值 如图:


当let B = A;时栈会从新开辟一个内存用来储存B的值如图:


因为这个原理,B 的赋值是重新开辟了内存进行保存,所以A跟B的值并不会有联系


引用数据类型名是储存在栈中的而值是储存在堆中的,栈里面还存储着这个数据的地址,可以根据这个地址去查询储存在堆中的数据。如图


A的值是储存在堆中的而B=A通过这种方式来赋值的话是跟基本数据类型不一样的,如图


B只会把A储存的地址赋值过去,并不会把堆中的数据赋值,这就导致了修改B的时候修改的是同一个地址指向的数据,就会出现B改变A也跟着改变。深拷贝的原理就是在复制数据的时候要在堆内单独开辟新的内存来存放新的值。

下面我们就实现一些简单的深拷贝:

1.可以通过JSON.stringify与JSON.parse来进行一些简单的深拷贝:

let newObj = JSON.parse(JSON.stringify(obj))

2.jQuery中extend( )

jQuery.extend([deep],target,object1,[objectN]);

3.使用递归的方法进行深拷贝


原理就是将数据单独分开判断,数组和对象区别开进行赋值的过程,当然还有很多好用的插件也可以达到深拷贝的目的,这里就不一一枚举了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、栈内存与堆内存 栈内存与堆内存 、浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然。 1、栈与栈...
    偶尔平凡_偶尔阅读 1,409评论 0 0
  • 前置知识:     说到深浅拷贝首先要了解的知识是数据类型,那么js中会有两个数据类型分别是 基本类型 和 引用类...
    船长___阅读 4,021评论 0 7
  • 目录 一.数据类型 二.浅拷贝与深拷贝 三.赋值和浅拷贝的区别 四.浅拷贝的实现方式 五.深拷贝的实现方式 一.数...
    我跟你蒋阅读 2,860评论 0 2
  • 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefine...
    Ferrari1001阅读 1,562评论 0 0
  • 参考的博客 深拷贝与浅拷贝区别:简单来说,b复制了a,改变a,如果b也发生变化,则是浅拷贝。如果b没有变,则是深拷...
    haha2333阅读 4,179评论 0 1

友情链接更多精彩内容