js中浅拷贝与深拷贝的区别

博客介绍了JavaScript中浅拷贝与深拷贝的区别。当变量为基本类型时,赋值操作是浅拷贝,相互独立;当为引用类型时,直接赋值会使两变量指向同一地址,改变一个会影响另一个。深拷贝可让两变量相互独立,并列举了for - in循环+递归和JSON方法转换两种实现方式。

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

首先我们需要明白浅拷贝与深拷贝的区别,以下举个例子更好理解一点: 

 

当我们定义一个a和b的变量(将a的值定为基本类型),同时将a的值赋值给b。当我们改变a的值时,b的值是不会改变的。

那么当我们给a赋值为引用类型(Object、Array)呢?

可以看到,当a的值为引用类型时,改变a的属性,b也会随之改变。那么,我们既想用到引用类型,又想当a改变时b不改变呢?这个时候就出现了浅拷贝与深拷贝的一个概念。

当a的值为值类型(基本类型)时不存在浅拷贝与深拷贝的区别,都是浅拷贝,分配的空间都是独立不影响的!

当a的值为引用类型时,将a的值赋值给b,其实是将a的地址赋值给了b。所以当a的值改变时,存储地址是没有变的,这就造成了b的值会相应改变。

 

深拷贝就是让b拥有a的值,并且有属于自己的地址,当a的值改变时不影响b的结果。

那么需要怎么实现?以下列举了2种方法:

// 方法一: 通过for-in循环+递归进行实现通过for-in循环+递归进行实现

// 方法二: 通过JSON方法转换实现【此方法缺陷:不会转方法(function(){})!!】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值