理解深拷貝和淺拷貝的區別

2021-10-08 16:41:36 字數 1134 閱讀 1059

用擴充套件運算子深拷貝陣列:

直接貼上**:

let arr =[1

,2,3

,4,5

,6];

let arr1 =

[...arr]

; arr1.

push(7

);console.

log(arr)

;//[1, 2, 3, 4, 5, 6]

console.

log(arr1)

;//[1, 2, 3, 4, 5, 6, 7]

當陣列是一維陣列時,擴充套件運算子可以進行完全深拷貝,改變拷貝後陣列的值並不會影響拷貝源的值。

但是,當陣列為多維時:

let arr =[1

,2,3

,4,5

,6,[

1,2,

3]];

let arr1 =

[...arr]

; arr1.

push(7

);arr1[arr1.length -2]

[0]=

100;

console.

log(arr)

;//[1, 2, 3, 4, 5, 6,[100, 2, 3]]

console.

log(arr1)

;//[1, 2, 3, 4, 5, 6, [100, 2, 3],7]

物件也是相同的道理

let cloneobj=

json

.parse

(json

.stringify

(obj)

);

第二種

unction deepclone

(obj)

;for

(key in obj)

else}}

}return objclone;

}

方法一:迴圈陣列每個物件都複製(其實還是物件複製)

for

(let i=

0;i), res.data[i]))

}

理解「淺拷貝」和「深拷貝」

淺拷貝 將原物件 原陣列 的 引用 直接賦給新物件 新陣列 新物件 新陣列 是原物件 原陣列 的乙個引用。如果改變這個新物件 新陣列 原物件 原陣列 就會改變。深拷貝 將原物件的各項屬性的 值 陣列的所有元素 都拷貝給新物件 新陣列 是拷貝的 值 而不是 引用 為什麼要使用深拷貝?希望改變新物件 新...

深拷貝與淺拷貝的區別和理解

深拷使用 總結一般拷貝的使用場景主要是,將物件或者陣列賦值到新的變數中。但是這樣就會出現乙個問題,當改變新的物件或陣列時,源陣列或物件也會發生改變,那麼這個時候要根據實際情況使用深度拷貝,還是淺拷貝,這裡不能一股腦的使用深度拷貝,畢竟深度拷貝對於效能的消耗還是蠻大的 對於像foreach map f...

深拷貝和淺拷貝的理解

為什麼要使用深拷貝和淺拷貝?當你想複製乙個物件時,一般做法是obj2 obj1,但是當你改動obj2的時候,會影響到obj1,而obj1也會影響到obj2,所以需要深拷貝和淺拷貝來解決物件的直接賦值仍然 連線 的問題。淺拷貝 複製乙份引用,讓所有引用物件指向乙份資料,並且可以修改這份資料,即只對指標...