深拷貝與淺拷貝

2021-09-17 01:25:09 字數 706 閱讀 6257

深拷貝與淺拷貝的區別

js中有六種資料型別,包括五種基本資料型別(number,string,boolean,undefined,null),和一種複雜資料型別(object)。

複雜資料型別又分為object型別,array型別,function型別。

深拷貝和淺拷貝都是針對與複雜資料型別的。基本資料型別是沒有深淺拷貝之分的。

淺拷貝僅是複製了引用位址,複製之後原來的變數和新的變數指向同乙個東西,彼此之間運算元據會產生相互影響。

深拷貝是在堆記憶體中重新分配位址,而複製的內容一樣,複製後的物件與原來的物件互不相干,互不影響。

方法一:利用es5中的json物件的parse和stringify方法

const obj = };

const obj_json = json.parse(json.stringify(obj));

console.log(obj === obj_json); // false

方法二:利用es6中的rest引數三點運算子

const arr = [1,2,3];

const arr_rest = [...arr];

console.log(arr === arr_rest); // false

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...