JS 數據類型

值類型(基本類型)

字符串(String)
數字(Number)
布爾(Boolean)
對空(Null)
未定義(Undefined)
Symbol: ES6引入的一種新的原始數據類型,表示獨一無二的值。

引用類型

對象(Object)
數組(Array)
函數(Function)

值類型和引用類型區別

聲明變量時不一樣的內存分配:

  • 原始值:存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。
  • 引用值:存儲在堆(heap)中的對象,也就是說,存儲在變量處的值是一個指針(point),指向存儲對象的內存地址。

不一樣的內存分配機制也帶來了不一樣的訪問機制

  • 在javascript中是不容許直接訪問保存在堆內存中的對象的,因此在訪問一個對象時,首先獲得的是這個對象在堆內存中的地址,而後再按照這個地址去得到這個對象中的值,這就是傳說中的按引用訪問。
  • 而原始類型的值則是能夠直接訪問到的。

複製變量時的不一樣

  • 原始值:在將一個保存着原始值的變量複製給另外一個變量時,會將原始值的副本賦值給新變量,此後這兩個變量是徹底獨立的,他們只是擁有相同的value而已。
  • 引用值:在將一個保存着對象內存地址的變量複製給另外一個變量時,會把這個內存地址賦值給新變量,也就是說這兩個變量都指向了堆內存中的同一個對象,他們中任何一個做出的改變都會反映在另外一個身上。多了一個指針。

參數傳遞的不一樣(把實參複製給形參的過程)

  • 原始值:只是把變量裏的值傳遞給參數,以後參數和這個變量互不影響。
  • 引用值:對象變量它裏面的值是這個對象在堆內存中的內存地址,所以它傳遞的值也就是這個內存地址,這也就是爲何函數內部對這個參數的修改會體如今外部的緣由了,由於它們都指向同一個對象。
相關文章
相關標籤/搜索