深拷贝 浅拷贝

浅拷贝主要是对指针的拷贝,拷贝后两个指针指向同一个内存空间

深拷贝需要不但对指针进行拷贝,并对指针指向的内容进行拷贝,经过深拷贝后的指针是指向两个不同地址的指针。

主要针对于引用数据类型参数说的,浅拷贝表示仅拷贝引用地址,深拷贝表示对于对象的克隆。

基本数据类型和引用数据类型在内存中如何存储

基本数据类型

基本数据类型变量都维护在栈区,基本数据类型的值保存在栈区。

var a = 123;
b = a;
a = 456;

var a = 123; b = a;基本数据类型是在栈内存中存储的,如下图,b = a的时候,b直接把a的值存进去

 

a = 456; 会把a的值改为456,但是对b没有任何影响,所以最后会输出a = 456;b = 123;

 

基本数据类型的值存在栈,值与值之间独立存在,修改一个值不会影响其他变量

  • 引用数据类型

引用数据类型的引用地址保存在栈区,值保存在堆区。

var obj = {
  name: 'zhangsan'
}
var obj1 = obj; //将对象obj赋值给对象obj1
console.log(obj.name);  //zhangsan
console.log(obj1.name); //zhangsan

// 修改obj的name
// 当obj属性name变为"lisi"时,obj1属性name也变为"lisi"
obj.name = 'lisi';
console.log(obj.name);  //lisi
console.log(obj1.name); //lisi

 

当栈存放引用类型时,值为对象的地址,obj与obj1指向同一个地址,所以当obj的name值变为“lisi”时,obj1也会发生变化

实现深拷贝的方法

1.通过json对象实现深拷贝(JSON.stringify,JSON.parse)

2.Object.assign()拷贝

3.lodash函数库实现深拷贝

4.递归的方式实现深拷贝

等等

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
包装类的深拷贝浅拷贝是指在复制一个包装类对象时,对于其中的字段如何进行复制的过程。 浅拷贝是指只复制值类型字段的值,而对于引用类型字段,只复制其引用。也就是说,新创建的对象和原始对象会共享一部分内存空间,导致对其中一个对象进行修改会影响到另一个对象。 深拷贝是指除了复制值类型字段的值外,还会对引用类型字段所指向的对象进行一次完全的拷贝。也就是说,新创建的对象会有自己独立的一份内存空间,对其中一个对象进行修改不会影响到另一个对象。 实现深拷贝的方法有多种。其中一种常用的方法是利用反序列化技术,通过将对象序列化为字节流,然后再将字节流反序列化为一个全新的对象。这种方法可以解决多层套娃式的深拷贝问题,并且效果非常好。 另外一种实现深拷贝的方式是通过覆写对象的clone()方法,实现引用对象的深度遍历式拷贝。这种方式需要对clone()方法进行重写,以便对引用对象进行递归拷贝。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Java】深拷贝浅拷贝(Java实现)](https://blog.csdn.net/hhb442/article/details/128801265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值