JavaScript 數據類型 & 內存


Posted by hata0833 on 2022-09-05

JavaScript有七種數據類型

  • 基本數據類型:null、undefined、number、string、BigInt、Symbol
  • 引用數據類型:Object

基本數據類型是存在棧內存中的,因為長度小,使用頻率高
而引用數據類型占用的空間大且不定,所以是用指針將引用數據類型的地址存下來放在棧中

const保證的是變量指向的地址不變,引用數據類型存的是指針,指向實際對象存儲在堆中的地址,改變對象中的值不會改變指針指向的地址,所以const聲明的對象是可以改變的

而基本數據類型,變量直接指向存著值的地址,所以視為常量
這裡困擾了我很久,應該怎麼理解呢
首先從一個例子說起

var a = 1;
var b = 1;
a === b; // true

第一行聲明了一個a,並且賦了一個1的值,檢查棧中有沒有1的值,沒有就將1放入棧中,並把地址分給a,使a指向1的地址
現在棧中有1,地址為零,a指向地址0

    stack
0|     1     | a 
--------------
1|           |
--------------
2|           |
--------------

第二行聲明了一個b,一樣賦了1值,檢查棧中有沒有1的值,發現有,於是把地址分給b,使b指向1的地址

    stack
0|     1     | a b
--------------
1|           |
--------------
2|           |
--------------

於是第三行的a === b 為true
現在將a的值改成3,棧中沒有3的值,將3放入棧中,把a的值改成地址1

a = 3;
    stack
0|     1     | b
--------------
1|     3     | a
--------------
2|           |
--------------

內存中的值是不會更改的,在更改值時,只會寫入新的值,而用不到的值會在JS回收機制中被清除


#javascript







Related Posts

讓 JavaSript 難以閱讀:jsfuck 與 aaencode

讓 JavaSript 難以閱讀:jsfuck 與 aaencode

ConQuest計分檔的分割函數

ConQuest計分檔的分割函數

# 〈 Diffusion Model 論文研究與實作心得 Part.3 〉 模型訓練、照片修復與結果呈現 (Finale)

# 〈 Diffusion Model 論文研究與實作心得 Part.3 〉 模型訓練、照片修復與結果呈現 (Finale)


Comments