深拷貝與淺拷貝

涉及到幾個知識點,分別是:堆棧、基本數據類型引用數據類型。

堆棧:兩者都是臨時存放數據的地方。棧區(qū)(stack) 由編譯器自動分配釋放內存 ,后進先出,存放函數的參數值,局部變量的值等。 堆區(qū)(heap) 一般由程序員動態(tài)分配釋放內存,若程序員不釋放,程序結束時可能由OS回收。?堆(數據結構):堆可以被看成是一棵樹,如:堆排序; 棧(數據結構):一種先進后出的數據結構。

基本數據類型:number,string,boolean,null,undefined五類,名值存儲在棧內存中。


引用數據類型:(Object類)有常規(guī)名值對的無序對象{a:1},數組[1,2,3],以及函數等。名存在棧內存中,值存在于堆內存中,但是棧內存會提供一個引用的地址指向堆內存中的值。


認識深拷貝和淺拷貝

javascript中一般有按值傳遞和按引用傳遞兩種復制,按值傳遞的是基本數據類型(Number,String,Boolean,Null,Undefined),一般存放于內存中的棧區(qū),存取速度快,存放量?。话匆脗鬟f的是引用類型(Object,Array,Function,Symbol),一般存放與內存中的堆區(qū),存取速度慢,存放量大,其引用指針存于棧區(qū),并指向引用本身。

  深拷貝和淺拷貝是相對于引用類型而言的:

  淺拷貝: 指兩個js 對象指向同一個內存地址,其中一個改變會影響另一個;

  深拷貝: 指復制后的新對象重新指向一個新的內存地址,兩個對象改變互不影響。

深拷貝的常用方式:

1,遞歸

2,JSON.parse(JSON.stringfiy(obj));

3,$.extend(true,{},obj);

4,lodash中的_.clone(obj, true);

5,_.cloneDeep(obj)?


參考文章:詳解javascript的深拷貝與淺拷貝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容