浅拷贝与深拷贝
一、数据类型存储
-
在JavaScript中存在两大数据类型:基本类型、引用类型。
二、浅拷贝
-
浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝。
-
如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址。
-
即浅拷贝是拷贝一层。
-
下面简单实现一个浅拷贝:
-
在JavaScript中,存在浅拷贝的现象有:
Object.assign()
Array.prototype.slice()
Array.prototype.concat()
使用扩展运算符实现的复制
-
Object.assign()
-
slice()
-
concat()
-
扩展运算符
三、深拷贝
-
深拷贝开辟一个新的栈,两个对象相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
-
常见的深拷贝方式有:
_.cloneDeep()
jQuery.extend()
JSON.stringify()
循环递归
-
_.cloneDeep()
-
jQuery.extend()
-
JSON.stringify()
-
循环递归
四、区别
-
浅拷贝只复制内存地址,而不复制对象本身,新旧对象还是共享同一块内存,修改对象属性会影响原对象。
-
深拷贝会另外创造一个一模一样的对象,新对象与原对象不共享内存,修改新对象不会改到原对象。
-
当拷贝类型为引用类型时:
- 浅拷贝是拷贝一层,属性为对象时,浅拷贝是复制,两个对象指向同一个地址。
- 深拷贝是递归拷贝深层次,属性为对象时,深拷贝是新开栈,两个对象指向不同的地址。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)