淺拷貝和深拷貝的區分以及實現

2021-09-29 23:21:00 字數 952 閱讀 2224

淺拷貝和深拷貝的區別以及編寫

資料型別分為基本資料型別和引用資料型別

基本資料型別:儲存在棧中

引用資料型別:儲存的是該物件在棧中的引用,真實的資料存放在堆記憶體中

引用資料型別在棧中儲存了指標,該指標指向該實體的起始位址。當直譯器尋找引用值時,會首先檢索其在棧中的位址,取得位址後從堆中獲得實體。

簡單點來說,就是假設b複製了a,當修改a時,看b是否會發生變化,如果b也跟著變了,說明這是淺拷貝,拿人手短,如果b沒變,那就是深拷貝,自食其力。

es6擴充套件運算子實現陣列的淺拷貝

var obj = 

var = obj

obj.old = '22'

console.log(obj)

console.log(obj2)

可用concat、slice返回乙個新陣列的特性來實現拷貝

var arr = ['old', 1, true, null, undefined];

var new_arr = arr.concat(); // 或者var new_arr = arr.slice()也是一樣的效果;

new_arr[0] = 'new';

console.log(arr); // ["old", 1, true, null, undefined]

console.log(new_arr); // ["new", 1, true, null, undefined]/2、

我們還可以借用json物件的parse和stringify

function deepclone(obj)    

let a=[0,1,[2,3],4],

b=deepclone(a);

a[0]=1;

a[2][0]=1;

console.log(a,b);

js 深拷貝和淺拷貝區別,以及實現深拷貝的方法

定義 1.深拷貝 function deepcopy obj var obj say console.log deepcopy obj 注意 這種拷貝方法不可以拷貝一些特殊的屬性 例如正規表示式,undefine,function function deepcopytwo obj if obj ty...

JS 深拷貝和淺拷貝概念,以及實現深拷貝的三種方式

1 堆疊 棧 stack 系統自動分配的記憶體空間,記憶體會由系統自動釋放,用來存放函式的引數值,區域性變數的值等,特點是先進後出。堆 heap 系統動態分配的記憶體,記憶體大小不一,記憶體不會自動釋放。一般由程式設計師分配釋放,主要負責像obejct這種變數型別的儲存。2 基本資料型別 概念 存放...

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...