JS对象(数组)的浅拷贝和深拷贝

1."="赋值操作

    const arr = ["孙悟空", "猪八戒", "沙和尚"]
    const arr2 = arr;
    console.log(arr)
    console.log(arr2)

输出:
在这里插入图片描述
修改第一个数组arr的任意一个值,我们可以发现,两个输出都会同时修改,故其"="赋值只是赋值了数组的内存地址,并没有开辟新的内存空间。

 const arr = ["孙悟空", "猪八戒", "沙和尚"]
    const arr2 = arr;
    console.log(arr)
    console.log(arr2)
    console.log("-----------修改后-----------")
    arr[0] = "白骨精"
    console.log(arr)
    console.log(arr2)

输出:
在这里插入图片描述

2.深拷贝和浅拷贝的区别

浅拷贝(shallow copy)
-通常对对象的拷贝都是浅拷贝
-浅拷贝顾名思义,只对对象的浅层进行复制**(只复制一层)**
-如果对象中存储的数据是原始值,那么拷贝的深浅是不重要

深拷贝(deep copy)
-深拷贝指不仅复制对象本身,还复制对象中的属性和元素
-因为性能问题,通常情况不太使用深拷贝

在这里插入图片描述

var a1 = {b: {c: {}};

var a2 = shallowClone(a1); // 浅拷贝方法
a2.b.c === a1.b.c // true 新旧对象还是共享同一块内存

var a3 = deepClone(a3); // 深拷贝方法
a3.b.c === a1.b.c // false 新对象跟原对象不共享内存

浅拷贝案例:

// 浅拷贝
const obj1 = {
    name : 'init',
    arr : [1,[2,3],4],
};
const obj3=shallowClone(obj1) // 一个浅拷贝方法
obj3.name = "update";
obj3.arr[1] = [5,6,7] ; // 新旧对象还是共享同一块内存

console.log('obj1',obj1) // obj1 { name: 'init',  arr: [ 1, [ 5, 6, 7 ], 4 ] }
console.log('obj3',obj3) // obj3 { name: 'update', arr: [ 1, [ 5, 6, 7 ], 4 ] }

深拷贝案例:

// 深拷贝
const obj1 = {
    name : 'init',
    arr : [1,[2,3],4],
};
const obj4=deepClone(obj1) // 一个深拷贝方法
obj4.name = "update";
obj4.arr[1] = [5,6,7] ; // 新对象跟原对象不共享内存

console.log('obj1',obj1) // obj1 { name: 'init', arr: [ 1, [ 2, 3 ], 4 ] }
console.log('obj4',obj4) // obj4 { name: 'update', arr: [ 1, [ 5, 6, 7 ], 4 ] }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值