javascript中的深拷貝和淺拷貝

2021-08-17 03:04:16 字數 727 閱讀 7199

一、遇到的問題:

寫了以下的一段js

var a = [a,b,c];

var c = a;

c.push(d);

然後console.log(a);會發現a中也多了d;

二、查詢資料並找到原因:

因為在js中,物件和陣列都是引用傳遞,所謂引用傳遞就是當變數c賦值為陣列a後,a和c便指向了同乙個位址,這個位址的值便是[a,b,c]這個陣列,所以當修改c,也就是修改了c指向位址的陣列,而a也指向這個陣列,所以a的值也會跟著變化

三、總結:

js中的賦值是分為深層拷貝以及淺層拷貝的,我們通常所用的「=」賦值,其實都是屬於淺拷貝,也就是如圖所示:

而如果想達到值傳遞的效果,也就是改變c而不引起a的改變,則可以使用json解析反解析的方式實現,具體使用如下:c = json.parse(json.stringify(a));也就達到了如圖所示的效果:

JavaScript中的深拷貝和淺拷貝

通俗的說,二者之前最大的不同就是它們的賦值方式。深拷貝的賦值方式就是值賦值,淺拷貝的賦值方式就是物件賦值。下面具體寫兩個例子來使你更加易懂。深拷貝 let a 5 let b a b 10 console.log a 輸出a 5 console.log b 輸出b 10 a和b的值是各自的,互相並沒...

javascript中的深拷貝和淺拷貝?

一 jquery的 extend 淺拷貝與深拷貝 extend deep target,object1 objectn deep 型別 boolean 如果是true,合併成為遞迴 又叫做深拷貝 target 型別 object object1 型別 object 乙個物件,它包含額外的屬性合併到第...

javascript中的深拷貝和淺拷貝

前拷貝 var obj var obj1 for var i in obj console.log obj1 深拷貝 var obj 封裝深拷貝 function deepcopy obj,obj1 else 在利用遞迴處理 複雜型別陣列 deepcopy obj key obj1 key var ...