JavaScript數據類型--值類型和引用類型


值類型:也稱為原始數據或原始值(primitive value)。

 

這類值存儲在棧(stack)中,棧是內存中一種特殊的數據結構,也稱為線性表,棧按照后進先出的原則存儲數據,先進入的數據被壓入棧底,最后插入(push)的數據放在棧頂,需要讀取數據時從棧頂開始彈出(pop)數據,即最后一個數據被第一個讀出來。因此說,值類型都是簡單的數據段。變量的位置和變量值的位置是重疊的,也就是說值類型的數據被存儲在變量被訪問的位置。

 

引用類型:這類值存儲在堆(heap)中,堆是內存中的動態區域,相當於自留空間,在程序運行期間會動態分配給代碼和堆棧。

 

堆中存儲的一般都是對象,然后通過一個編號傳遞給棧內變量,這個編號就是所謂的引用指針(point),這樣變量和變量值之間是分離的,它們通過指針相聯系。當讀寫數據時,計算機通過變量的指針找到堆中的數據塊,並進行操作。

 

在JavaScript中,number、string、boolean、null和undefined型數據都是值類型。由於值類型數據占據的空間都是固定的,所以可以把它們存儲在狹窄的內存棧區。這種存儲方式更方便計算機進行查找和操作,所以執行速度會非常快。

 

而對於object型數據(包括function和array)來說,由於它們的大小是不固定的,所以不能存儲在棧區,只能被分配到堆區,如果存儲在棧區,則會降低計算機尋址的速度。而堆的空間是不固定的,所以很適合存儲大小不固定的對象數據,然后在棧區存儲對象在堆區的地址即可,而地址的大小是固定的,所以這種分離存儲的方法不會影響計算機的尋址速度,對於變量的性能也沒有任何負面影響(如圖)。

在JavaScript語言中,object、function和array等對象都是引用型數據。很多語言都把字符串視為引用型數據,而不是值類型,因為字符串的長度是可變的。但是JavaScript比較特殊,它把字符串作為值類型進行處理。不過,字符串在復制和傳遞運算中,是以引用型數據的方法來處理的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM