深拷贝和浅拷贝与运用

本文讲述了浅拷贝和深拷贝在JavaScript中的概念,强调了两者在复制过程中的差异,以及如何通过`=`,`[]`操作符和`JSON.parse(JSON.stringify())`实现不同类型的复制,特别是对象内部引用类型的处理。
摘要由CSDN通过智能技术生成

1、浅拷贝:

指的是创建一个新对象,其中包含原始对象的引用(指针),并没有真正将原始对象的数据复制到新对象中,因此新对象与原始对象共享部分或全部数据。

2、深拷贝

深拷贝指的是创建一个新对象,并递归地将原始对象的数据复制到新对象中,因此新对象与原始对象之间不存在数据共享。

3、区别:

主要区别在于复制过程中是否会创建新的独立对象以及是否会复制对象内部的内容

浅拷贝是指在复制过程中,只复制对象本身以及对象内部的引用,而不复制引用指向的具体内容。换句话说,浅拷贝创建了一个新的对象,但该对象与原始对象共享一部分内存。当修改其中一个对象时,另一个对象也会受到影响。

深拷贝则是指在复制过程中,不仅复制对象本身,还复制对象内部的所有内容,包括引用指向的具体内容深拷贝会创建一个完全独立的新对象,对新对象的修改不会影响原始对象。

4、例子:

在js中:

settingInfo.value.data =attList.value settingInfo.value.data = [...attList.value] 和 settingInfo.value.data = JSON.parse(JSON.stringify(attList.value))的区别

settingInfo.value.data = attList.value
这种方式是直接赋值,也就是说 settingInfo.value.data 
和 attList.value 现在指向的是同一个数组,它们共享同一块内存空间。
这意味着,无论你修改哪一个数组,另一个数组也会跟着改变。
settingInfo.value.data = [...attList.value]

这种方式使用了扩展运算符(...),它会创建 attList.value 数组的
一个浅拷贝,然后将这个拷贝赋值给 settingInfo.value.data。

这意味着 settingInfo.value.data 现在指向的是一个新的数组,这个
数组和 attList.value 不共享内存空间。因此,如果你修改 
settingInfo.value.data,attList.value 不会改变,反之亦然。

但是,请注意,这是一个浅拷贝,如果数组中的元素是对象(或者其他引用
类型的数据),那么这个拷贝仍然会保留对原对象的引用,所以当 
attList.value 中的对象改变时,settingInfo.value.data 中的对
应元素也会改变。
settingInfo.value.data = JSON.parse(JSON.stringify(attList.value))

这种方式会创建 attList.value 数组的一个深拷贝。

这意味着 settingInfo.value.data 现在指向的是一个新的数组,这个数组和
 attList.value 不共享内存空间,而且数组中的元素(即使是对象或其他引用
类型的数据)也是完全独立的。也就是说,无论你如何修改 
attList.value,settingInfo.value.data 都不会改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值