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