前端面试提浅拷贝和深拷贝
时间: 2023-08-19 20:14:14 浏览: 120
浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。\[2\]
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。深拷贝会递归地复制对象中的子对象,确保所有层级的对象都被复制。\[2\]
浅拷贝的实现方式有多种,比如使用Array.concat()、Array.slice()、Object.assign()和展开运算符等。这些方法都是创建一个新的对象,但是对于引用类型的属性,仍然是共享同一块内存,所以会相互影响。\[2\]
深拷贝的实现方式也有多种,比如使用JSON.parse(JSON.stringify())和jQuery.extend()等。这些方法会递归地复制对象中的子对象,确保所有层级的对象都被复制,从而实现完全独立的拷贝。\[2\]
浅拷贝适用于对简单的对象或数组进行拷贝,当想要修改其中一个对象的值,但又要保留原来对象的值不被修改时,可以使用浅拷贝。而深拷贝适用于对复杂的对象或数组进行拷贝,当想要创建一个新的对象或数组,并且对新对象或数组的修改不会影响原对象或数组时,可以使用深拷贝。\[4\]
总结起来,浅拷贝只复制一层对象的属性,而深拷贝则递归复制了所有层级。\[2\]
#### 引用[.reference_title]
- *1* [有关深拷贝浅拷贝(经典前端面试题)](https://blog.csdn.net/weixin_49602426/article/details/127289749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [[前端面试题]:深拷贝与浅拷贝的区别](https://blog.csdn.net/WWEIZAI/article/details/126519334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [前端面试:浅拷贝和深拷贝的区别?](https://blog.csdn.net/weixin_39570751/article/details/123363926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文