一、類型與包裝對象
1、類型
原始類型:
- number
- string
- boolean
- null
- undefined
- Symbol
對象類型:
- Object
- Array
- Function
原始類型(基本類型)和對象類型(引用類型)的區別:
- 原始類型不能修改值,對象類型可以。
分析:原始類型存儲在棧內存中,對象類型存儲在堆內存中。原始類型的修改都是重新賦值。
即,聲明一個原始類型,var a = 2;
那麼會在棧內存中開闢一塊內存用於存儲原始類型a
,當重新賦值a = 234
的時候,會重新開闢一塊棧內存用於存儲重新賦值的原始類型a
,2
則被垃圾回收機制回收。
至於對象類型,棧內存中存的是對象數據在堆內存中的首地址,也就是該數據的引用。在訪問變量的時候就會去堆內存中找引用對象的值,修改的時候也是修改堆內存中的值。
- 原始類型沒有屬性和方法,對象類型可以有
null和undefined的區別:
- undefined表示一個未被賦值的棧內存的空間,null表示棧空間的引用沒有指向一個地址
- 進行顯示類型轉換時,null爲0,undefined爲NaN
- typeof(null) === 'object'
typeof(undefined) ==='undefined'