學習記錄 js深拷貝 淺拷貝

2021-10-21 17:57:15 字數 759 閱讀 8249

js 的資料型別有兩種,一種是基本資料型別(string、number、boolean、null、undefined、symbol),一種是引用資料型別(object、array、function)。

基本資料型別是放在棧記憶體的,而引用資料型別是存放在堆記憶體的,它會在棧記憶體裡面存放乙個指向堆記憶體的指標。

所以,淺拷貝只複製指向某個物件的指標,而不是複製物件本身,新舊物件還是共享同一塊記憶體,深拷貝會另外創造乙個一模一樣的物件,新物件跟原物件不共享記憶體,修改新物件不會改到原物件。

// 如果只是簡單的陣列物件,可以用以下方法實現深拷貝

const newobject = object.

assign(,

...obj)

// 一維陣列、物件

const newobject =

json..

parse

(json

.stringify

(obj)

)const newobject = array.

slice()

// 一維陣列

const newobject =

[...array]

// 其它的比較複雜的可以使用遞迴來實現深拷貝

function

deepcopy

(obj1)

;for

(var i in obj1)

else}}

return obj2;

}

js淺拷貝深拷貝

js淺拷貝深拷貝 對於想要複製的物件,如果物件裡面對應的值都是基本資料型別的,可以直接複製 也就是通過淺拷貝複製。如果對應的值有物件那麼淺拷貝是行不通的。會造成資料汙染。下面介紹淺拷貝與深拷貝實現方法。1.淺拷貝 let tem let copy for let key in tem 2.通過obj...

淺拷貝,深拷貝 js

堆和棧 基本型別 存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配。6種基本資料型別 undefined null boolean number和string,es6新增屬性symbol.他們是直接按值存放的,所以可以直接訪問。引用型別 存放在堆記憶體中的物件,變數實際儲存的是乙個指標,...

JS淺拷貝 深拷貝

1,前景提要 1 數字在被複製後,再修改時,不會改變原值 var a 5 var b a b 7 console.log a a不變 2 物件在被複製後,再修改時,會改變原值 var a var b a b.name hi console.log a a.name hi 2,淺拷貝 拷貝一層物件。深...