[前端面试题]:深拷贝与浅拷贝的区别

本文详细解析了深拷贝与浅拷贝的概念、区别及应用场景,并提供了多种实现方式,包括浅拷贝的Array.concat(), Object.assign()等方法,以及深拷贝的JSON.parse(JSON.stringify()), jQuery.extend()等技术。

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

[前端面试题]:深拷贝与浅拷贝的区别

1.什么是深拷贝与浅拷贝

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,
拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改
变了这个地址,就会影响到另一个对象。
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修
改新对象不会影响原对象。

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

浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类
型因共享同一块内存,会相互影响。
深拷贝:从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两
个对象互不影响。
浅拷贝只复制一层对象的属性,而深拷贝则递归复制了所有层级。

3.深拷贝与浅拷贝的实现方式

1.浅拷贝的实现方式:

1.Array.concat( )
2.Array.slice( )
3.Object.assign( )
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对
象。
语法:Object.assign(target, source1, source2)
target:目标对象
source:源对象
4.展开运算符

2.深拷贝的实现方式

1.JSON.parse(JSON.stringify())
2.jQuery.extend( )
语法:$.extend( [deep ], target, object1 [, objectN ] )
deep:Boolean类型,指示是否深度合并对象,默认为false。如果该值为true,且多个对象的某个
同名属性也都是对象,则该"属性对象"的属性也将进行合并。

4.深拷贝与浅拷贝的应用场景

  • 无论是浅拷贝还是深拷贝,一般都用于操作Object 或 Array之类的复合类型。
  • 对于一层结构的Array和Object想要拷贝一个副本时使用,使用浅拷贝
  • 对于想对某个数组或对象的值进行修改,但是又要保留原来数组或对象的值不被修改,此时就可以用深拷贝来创建一个新的数组或对象,从而达到操作(修改)新的数组或对象时,保留原来数组或对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值