一、資料型別
js有兩種資料型別
2. 棧(stack)與 堆(heap)的概念
3. 這兩類資料型別的儲存方式
變a的同時b沒有發生改變,因此接下來分析一下產生這種變化的原因:
當 b = a 時,棧會新開闢乙個記憶體,如下:
所以當你此時修改a=2,對b並不會造成影響,因為此時的b已自食其力,翅膀硬了,不受a的影響了。
當然,let a=1,b=a;雖然b不受a影響,但這也算不上深拷貝,因為深拷貝本身只針對較為複雜的object型別資料。
變a的同時b也發生了改變,因此接下來分析一下產生這種變化的原因:
當b拷貝a時,即 b = a ,複製的是a的引用位址,而不是堆記憶體裡面的值;
而當我們 a[0] = 22 進行陣列修改時,由於a與b指向的是同乙個位址,因此b也受了影響,這就是所謂的 「淺拷貝」;
但是當我們在堆記憶體中也去開闢乙個新的記憶體,用來專門為b存放值,就像基本型別那樣,豈不就達到深拷貝的效果了;
4、「深拷貝」的實現方式
缺點:丟失constructor,regexp無法實現
輸出結果為:
輸出結果為:
lodash是乙個很熱門的函式庫,提供了 lodash.clonedeep()實現深拷貝,但是一旦拷貝一些很複雜的物件就有可能報錯。比如用clonedeep轉殖乙個vue例項,就有可能報key.charat is not a function的錯。(正確的拷貝方法是vue.extend())。
二、參考位址
基本資料型別與引用資料型別
基本資料型別與引用資料型別 基本資料型別 基本資料型別 大小 範圍 預設值 int 整形 32 2147483648 2147483648 0 long 長整形 64 9233372036854477808 9233372036854477808 0 float 浮點形 32 3.40292347e...
基本資料型別與引用資料型別
byte short int long float double boolean charstring class sun提供的 system.class sun提供的 student.calss 程式設計師自定義的 user.class 程式設計師自定義的 product.class程式設計師自定...
基本資料型別與引用資料型別
在談深拷貝與淺拷貝之前,我們先來談談js的資料型別,這對接下來了解深拷貝淺拷貝起到一定的作用。棧記憶體棧是自動分配相對固定大小的記憶體空間,而且由系統自動釋放的。棧是線性結構,後進先出。基本資料型別 null undefined number string boolean symbol es6 基本...