10-29:深浅拷贝,是怎么做的?

博客介绍了前端中数据分为基本和对象数据类型,浅拷贝和深拷贝主要针对Object和array对象。浅拷贝只复制指针,新旧对象共享内存;深拷贝会创建新对象,不共享内存。还给出了浅拷贝如Object.assign()等方法,以及深拷贝如JSON.parse(JSON.stringify())、手写递归、lodash.cloneDeep()等实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。

(1)基本类型:就是值类型,字符串,即在变量所对应的内存区域存储的是值。

           特点:直接存储在栈(stack)中的数据,拷贝后形成新的数据,修改拷贝后的数据也不会影响原始数据。

(2)引用类型:就是地址类型(相当于编号---便于寻找),对象/数组。  

           特点:存储的真实数据在堆中,但是在栈中被引用,拷贝后不生成新的数据,是引用,修改拷贝后的数据会影响原始数据。
 

深拷贝和浅拷贝都是主要针对Object和array对象。

浅拷贝只复制指向某个对象的指针,不复制对象本身,新旧对象还是共享同一块内存。深拷贝会另外创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会修改到原对象

浅拷贝实现

1.Object.assign()

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign()进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

注意:当object只有一层的时候,是深拷贝

2.Array.prototype.concat() 

修改新对象会改到原对象

3.Array.prototype.slice() 

 同样修改新对象会改到原对象

关于Array的slice和concat方法的补充说明:Array的slice和concat方法不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。

深拷贝的实现

1.JSON.parse(JSON.stringify()),但是这种方法不能处理函数

2.手写递归方法

递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。

3.函数库lodash

lodash很热门的函数库,提供了 lodash.cloneDeep()实现深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值