有關(guān)深拷貝淺拷貝(經(jīng)典前端面試題)

拷貝的定義

  • 拷貝:復(fù)制、Ctrl+C、搞一份一樣的東西出來。
  • 深拷貝:開辟一個(gè)新的空間,將原來的東西復(fù)制一份完完整整的進(jìn)去,就和備份類似,所以深拷貝修改一個(gè)對(duì)象不會(huì)影響另一個(gè)對(duì)象(深拷貝是在 中申請新的空間來存儲(chǔ)拷貝的數(shù)據(jù),這樣就可以避免指針懸掛;指針懸掛:指針指向非法的內(nèi)存地址,也叫野指針,也就是正常使用的指針)
  • 淺拷貝:淺拷貝分為兩種:
    1. 如果屬性為基本類型的拷貝,那么復(fù)制出來的就是基本類型的
    2. 如果屬性為引用類型的拷貝,那么復(fù)制的就是內(nèi)存地址;
      所以不管是拷貝還是被拷貝的一方改變了這個(gè)地址,都會(huì)影響到另一方

基本類型和引用類型

JS里面的幾種(數(shù)據(jù))類型分為:基本(數(shù)據(jù))類型和引用(數(shù)據(jù))類型;

  • 基本(數(shù)據(jù))類型:Number、String、Boolean、Null、undefined、Symbol等基本上都存放在中。。
  • 引用(數(shù)據(jù))類型:也就是Object type,比如Object、Array、Function、Data等,只有存放在中,其他基本存放在中。

簡單說一下什么是堆什么是棧

  • 和棧都是操作系統(tǒng)自帶的一個(gè)內(nèi)存空間;
  • 棧是有系統(tǒng)自動(dòng)分配的內(nèi)存空間,??臻g里面存儲(chǔ)的是可以直接訪問的;
  • 是后期程序員可以開辟擴(kuò)大的,一般由程序員主動(dòng)分配才釋放;
  • 棧優(yōu)點(diǎn):速度快;優(yōu)點(diǎn):內(nèi)存大;

你在什么時(shí)候使用過深拷貝/淺拷貝呢?

  • 深拷貝:一般ES6里的新增語法都是深拷貝,深拷貝會(huì)找到復(fù)雜數(shù)據(jù)類型里面的元素的來復(fù)制,比如說:遞歸、JSON(JSON.stringfy+JSON.parse)、lodash、、jQuery.extend()方法第一個(gè)參數(shù)要傳true、structuredClone
  • 淺拷貝:復(fù)制在內(nèi)存中的引用地址,比如:剩余運(yùn)算符、Object.assign()、數(shù)組原型上的方法實(shí)現(xiàn)數(shù)組淺拷貝(Array.prototype.slice、Array.prototype.concat)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容