JS深 淺拷貝

2021-10-03 12:47:48 字數 1468 閱讀 7347

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。

object、array 這兩個就是引用型別,當我門直接去拷貝的話(copyobj = obj), 拷貝的是指obj的引用,當你修改copyobj時候,obj也會同時改變;陣列也一樣道理。

深拷貝

深拷貝,要實現的效果是不管物件或陣列裡面巢狀了多少層引用型別,都能拷貝出來,而非只拷貝它的引用

要實現深拷貝的方法常用有一下方法:

json.parse、json.stringify

let obj2 =

json

.parse

(json

.stringify

(obj1)

)

缺點:undefined、function、symbol 會在轉換過程中被忽略

遞迴深拷貝

// 不支援迴圈引用

function

deepcopy

(src)

for(

let key in src)

else}}

return temp

}let obj2 =

deepcopy

(obj1)

淺拷貝

那麼淺拷貝,簡單引用型別直接賦值

或者引用型別的首層進行了深拷貝,但是屬性中還有引用型別,只是拷貝它的引用,這樣的情況下,也為淺拷貝

以下淺拷貝方法,都只是實現了首層的深拷貝,當巢狀引用型別就要只會拷貝它的引用

es6擴充套件運算子

let obj2 =

// 物件淺拷貝

let arr2 =

[...arr1]

// 陣列淺拷貝

object.assign()

let obj2 = object.

assign

(, obj1)

遍歷

let

shallowcopy

= obj =>

// 遍歷物件

for(

let key in obj)

}return temp

}let obj2 =

shallowcopy

(obj1)

concat()

let arr2 =

.concat

(arr1)

js 深淺拷貝

深拷貝就是複製內部內容 淺拷貝就是複製記憶體位址 var obj 淺拷貝 引用傳遞 淺拷貝就是賦值,將鑰匙複製乙份 var o obj 深拷貝 內部內容複製乙份 將房子複製乙份 方法一 var str json stringify obj var obj3 json parse str 方法二 va...

js深淺拷貝

1.什麼是深淺拷貝 簡單的來說,加入b複製a a改變 如果b也跟著改變的話,那就是淺拷貝,反之是深拷貝 實現淺拷貝方法 1.賦值操作 var a 0 1,2 3,4 var b a a 0 5console log a 5,1,2,3,4 console log b 5,1,2,3,4 2.es6 ...

JS深淺拷貝

1.淺拷貝 將原物件或原陣列的引用直接賦給新物件,新陣列,新物件 陣列只是原物件的乙個引用 2.深拷貝 建立乙個新的物件和陣列,將原物件的各項屬性的 值 陣列的所有元素 拷貝過來,是 值 而不是 引用 使用深拷貝的場景 在改變新的陣列 物件 的時候,不改變原陣列 物件 1.for迴圈遍歷陣列 var...