js深淺拷貝的問題

2021-09-19 03:38:00 字數 951 閱讀 6808

例:1

let a = 

let b = a;

console.log(b.num); //1

a.num = 2

console.log(b.num); //2

b.num = 3;

console.log(a.num); //3

可以看出物件間的賦值會相互影響,因為他們是引用型別,所有的值都存在記憶體的乙個區域裡,物件通過指標指向去呼叫,一旦發生改變,所有指向這個區域的變數都會受到影響。

解決這個問題可以採用(深)淺拷貝的方法,依情況而定。

object.assign()…

例2,通過object.assign()方法複製物件

let a = 

let b = object.assign(a);

a.num = 2

console.log(b.num); //1

例3,通過…方法完成物件的複製

let a = 

let a =

a.num = 2

console.log(b.num); //1

對於物件內包含物件的,需要深拷貝,淺拷貝只能複製第一層。 例4

let a = 

let b = json.parse(json.stringify(a))

console.log(b.firstname);

特殊的,如undefind、函式、symbol() 、還有迴圈賦值的,深拷貝也滿足不了他們,我們可以使用 lodash 的深拷貝函式,lodash基本上所有的都可以做拷貝。

//lodash

var objb = _.clonedeep(obja);

objb === obja //false

JS深 淺拷貝

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。object array 這兩個就是引用型別,當我門直接去拷貝的話 copyobj obj 拷貝的...

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