JavaScript深浅拷贝的理解

JavaScript深浅拷贝的理解

深浅拷贝只是针对引用类型的,因为引用类型是存放在堆内存中,在栈地址有一个或者多个地址来指向堆内存的某一数据

浅拷贝:

被赋值对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用任然指向原来的对象。

浅拷贝仅仅复制所考虑的对象,而不复制他所引用的对象,如果你修改了元对象的值,那么原来的对象也会被修改

深拷贝:

深拷贝事一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢且内存占用较大。

深拷贝把要复制的对象所引用的对象都复制了一遍。如果你修改了元对象的值,那么原来的对象不会被修改,两者事相互独立的。

代码案例:

浅拷贝:
// A code block
let arr= [1,2,3,4];
let brr=arr
brr[0]=11
console.log(arr,brr)
// An highlighted block
let arr= [1,2,3,4];
let brr=arr
brr[0]=11
console.log(arr,brr)
 [11, 2, 3, 4]
 [11, 2, 3, 4]

本来是想把arr赋值给brr,修改brr的0下标时,却发现arr也发生了改变

深拷贝:
// A code block
let arr=[1,2,3,4]
let brr=JSON.parse(JSON.stringify(arr))
brr[0]=11
console.log(arr,brr)
[1,2,3,4]
[11,2,3,4]
// An highlighted block
let arr=[1,2,3,4]
let brr=JSON.parse(JSON.stringify(arr))
brr[0]=11
console.log(arr,brr)
[1,2,3,4]
[11,2,3,4]

对比刚才的浅拷贝案例,可以发现在深拷贝中 元数组arr的值并没有被改变,可以说两者事相互独立的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值