JS 中分為七種內置類型,七種內置類型又分為兩大類型:基本類型和對象(Object)。
基本類型有六種: null
,undefined
,boolean
,number
,string
,symbol
。
其中 JS 的數字類型是浮點類型的,沒有整型。并且浮點類型基于 IEEE 754標準實現,在使用中會遇到某些 Bug。NaN
也屬于 number
類型,并且 NaN
不等于自身。
Typeof
typeof 對于基本類型,除了 null 都可以顯示正確的類型
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof b // b 沒有聲明,但是還會顯示 undefined
typeof 對于對象,除了函數都會顯示 object
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'
對于 null 來說,雖然它是基本類型,但是會顯示 object,這是一個存在很久了的 Bug
typeof null // 'object'
PS:為什么會出現這種情況呢?因為在 JS 的最初版本中,使用的是 32 位系統,為了性能考慮使用低位存儲了變量的類型信息,000 開頭代表是對象,然而 null 表示為全零,所以將它錯誤的判斷為 object 。雖然現在的內部類型判斷代碼已經改變了,但是對于這個 Bug 卻是一直流傳下來。
如果我們想獲得一個變量的正確類型,可以通過 Object.prototype.toString.call(xx)。這樣我們就可以獲得類似 [object Type] 的字符串。
let a
// 我們也可以這樣判斷 undefined
a === undefined
// 但是 undefined 不是保留字,能夠在低版本瀏覽器被賦值
let undefined = 1
// 這樣判斷就會出錯
// 所以可以用下面的方式來判斷,并且代碼量更少
// 因為 void 后面隨便跟上一個組成表達式
// 返回就是 undefined
a === void 0