前端深拷贝与浅拷贝区别

本文探讨了前端开发中深拷贝和浅拷贝的区别,主要聚焦于基本数据类型和引用数据类型的拷贝行为。在基本数据类型中,拷贝过程会创建新的内存空间,而在引用数据类型中,拷贝仅复制引用地址,导致修改一处会影响所有引用。文章以JavaScript为例,展示了如何在Vue中实现深拷贝,并提到了常用的`JSON.parse(JSON.stringify())`方法。同时,邀请读者分享更优的深拷贝解决方案。

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

前端深拷贝和浅拷贝的区别

        在日常工作中,可能有很多人像我一样,并没有系统的从基础层面学习前端知识,只是针对当前流行的框架进行简单了解后,根据官网的样例进行使用并完成指定的开发工作

        在说拷贝的问题之前,我先说下数据类型:

基本数据类型:Number,  String,  BooleanUndefinedNull Symbol(ES6中新增,暂未学习使用) 

引用数据类型:Object(也就是对象类型Object type,比如:Object 、Array 、Function 、Data等。)

首先根据自己的理解,深拷贝的概念只存在引用数据类型(object)中,下面就详细说下

基本数据类型:

例如:

let a = 1;
 b = a;

由图可知,名(a,b)和值(1)都存在栈内存中,并且当我们将a的值赋给b后,是给b新开辟了一个内存空间,所以在基本数据类型中不存在深拷贝和浅拷贝的区别,在你赋值的过程中就是给它开辟了新的栈内存空间

引用数据类型:

例如:

let obj1 = [a,b,c];
let obj2 = obj1;

由图可知,在引用数据类型中,栈中存放的是名和引用地址,我们通过指向堆中的地址,去堆中拿取对应的值,所以我们通过“=”赋值的过程中,实际是就是将obj1的引用地址赋值给了obj2,所以当我们对数据进行修改的时候,无论用“=”赋值了多少个,我们只要修改了其中的一个值,那么所有的值都会改变,这也就是所谓的浅拷贝,在现实的场景中我们有些地方需要这样去控制数据,但也有一些情况是,我们需要将对象拿出来,单独处理,这时候就涉及到了深拷贝的使用。

vue中常用的深拷贝方法:

最简单的就是使用(目前本人使用): JSON.parse(JSON.stringify())

                                                                        如果大家有更好的办法可以评论提供下学习的链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值