JS 變數及深淺拷貝

2022-07-24 07:39:11 字數 2800 閱讀 8590

js變數分為基本型別和引用型別

基本型別資料報括number, string, boolean, null, undefined五種型別;

引用資料型別包括array, date, regexp, function等, 統稱為object型別。

js變數的儲存方式

基本型別變數儲存在記憶體的棧中,棧內分別儲存著變數的識別符號和變數的值。

引用型別變數儲存在記憶體的堆中,儲存結構如下

基本與引用變數的區別

變數的訪問方式不同

從乙個變數向另乙個變數複製基本型別值和引用型別值時,存在不同

訪問方式

基本變數:

按值訪問,即通過對儲存在變數中的值進行操作

引用變數:

按引用訪問,即通過變數的引用對變數進行操作,不能直接訪問引用變數的記憶體空間

從乙個變數向另乙個變數複製基本型別值和引用型別值時

基本變數的複製

num2變數值的改變並不會影響變數num1的值,num2中的3只是num1中的3的乙個副本,兩者相互獨立,互不影響。

其複製及賦值過程如下圖所示:

引用變數的複製

person2實際上從person1上覆制的是乙個指標,然後person1 和 person2同時指向堆記憶體中乙個的物件,改變其中乙個變數,就會影響另乙個變數。

其複製與賦值過程如下:

js深淺拷貝

js的深淺拷貝只針對於引用型別值。

淺拷貝如上所示引用變數的複製,當乙個引用變數複製到另乙個變數,新的變數和老的變數互相影響,那麼稱這個複製為淺拷貝。

深拷貝當乙個引用變數複製到另乙個變數,新的變數和老的變數互不影響,那麼稱這個複製為深拷貝。

深淺拷貝的本質區別在於複製的是物件的引用還是物件例項,淺拷貝複製的是物件的引用,深拷貝複製的是物件的例項。

那麼引用型別值是否可以實現深拷貝,答案是肯定的,具體思路如下:

深拷貝**如下:

json物件的stringify和parse

stringify函式是把乙個js物件序列化為乙個json字串

parse函式是把乙個json字串反序列化為乙個js物件

那麼通過函式stringify和parse組合進行的複製是深拷貝還是淺拷貝你呢?看**

由執行結果可知,通過函式stringify和parse組合進行的複製是深拷貝。

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