深拷貝與淺拷貝

2021-10-08 13:56:25 字數 1977 閱讀 5516

深拷貝和淺拷貝是只針對object和array這樣的引用資料型別的。

簡單描述

普通型別:

let aa =

1let bb = aa

console.

log(object.

is(aa, bb)

)//true

let arr =[1

,2,3

,4,5

]let arr1 = arr

arr1[2]

='6'

console.

log(

'原陣列:'

+ arr)

//1,2,6,4,5

console.

log(

'新陣列:'

+ arr1)

//1,2,6,4,5

淺拷貝的時候如果資料是基本資料型別,那麼就如同直接賦值那種,會拷貝其本身,如果除了基本資料型別之外還有一層物件,那麼對於淺拷貝而言就只能拷貝其引用,物件的改變會反應到拷貝物件上;但是深拷貝就會拷貝多層,即使是巢狀了物件,也會都拷貝出來。

淺拷貝

淺拷貝是拷貝一層,深層次的物件級別的就拷貝引用;

slice

let arr =[1

,2,3

,4,5

]let arr1 = arr.

slice(0

) arr1[2]

=6console.

log(

'原陣列:'

+ arr)

//1,2,3,4,5

console.

log(

'新陣列:'

+ arr1)

//1,2,6,4,5

console.

log(object.

is(arr, arr1)

)//false

concat

let arr =[1

,2,3

,4,5

]let arr1 = arr.

concat()

arr1[2]

=6console.

log(

'原陣列:'

+ arr)

//1,2,3,4,5

console.

log(

'新陣列:'

+ arr1)

//1,2,6,4,5

console.

log(object.

is(arr, arr1)

)//false

assign

let obj =

let obj1 = object.

assign

(, obj)

obj1.*** =

'woman'

console.

log(obj)

//console.

log(obj1)

//

深拷貝

深拷貝是拷貝多層,每一級別的資料都會拷貝出來;

let obj =

let obj1 =

json

.parse

(json

.stringify

(obj)

)console.

log(obj)

console.

log(obj1)

遞迴拷貝

// 2. 遞迴拷貝

function

deepclone

(obj)

for(

let i in obj)

}return copy

}

「淺拷貝」與「深拷貝」

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...