深拷貝和淺拷貝是只針對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...