一、js內置類型
基礎類型:String, number, null, undefine, boolean, symbol, bigint
引用類型:Object(包含普通對象Object,數組對象Array,正則對象Regexp,日期對象Date,數學函數Math,函數對象function)
!注:js不支持創建自定義類型機制,所有的類型都是這8個類型之一。
二、存儲位置
基礎數據類型:存放在棧內存,被引用或被拷貝時候,會創建一個完全相等的變量,占據空間小,大小固定,屬於被頻繁使用的數據類型。
引用數據類型:存放在堆內存中,引用數據類型會在棧內存存儲數據的地址,當使用引用類型時候,在棧內存獲取堆內存地址,然后去堆內存根據地址尋找數據。多個棧內存可以使用同一個堆內存地址,所 以當其中一個變量改變了共享的數值時,其他所有的共享該值的變量都會改變。
三、js數據如何存儲在內存中
js執行過程中,有三種類型的內存空間(代碼空間,棧空間,堆空間),代碼空間存儲可執行的代碼,基礎類型存儲在棧空間,引用類型存儲在堆空間,訪問引用類型的時候要先去棧空間獲取存儲地址。
在編譯過程中,如果js引擎判斷到一個閉包,也會在堆空間創造一個closure(fn)對象,用來保存閉包中的變量,所以閉包中的變量也會存儲在堆空間。
!注:function使用引用參數時傳入的是存儲在棧空間的地址,使用return返回,會將創建一個新堆地址將返回值存入。