前面咱們學習了JS中的數據類型:javascript
基礎數據類型:
number
、string
、boolean
、null
、undefined
、symbol
、BigInt
java引用數據類型:
object(普通對象、數組對象、正則對象、日期對象...)
、function
數組
今天咱們簡單介紹下JS中數據類型檢測中的typeof
瀏覽器
tyepof [value]
:檢測數據類型的運算符[example] instanceof [class]
: 檢測某一個實例是否屬於這個類[example].constructor===[class]
:檢測實例和類關係的,從而檢測數據類型Object.prototype.toString.call([value])
:檢測數據類型tyepof [value]
typeof
檢測的結果首先是一個字符串;「number」
、「string」
、「boolean」
、「undefined」
、「object」
、「function」
、「symbol」
、「bigint」
)NaN
/ Infinity
都是數字類型的,檢測結果都是「number」
;typeof null
的結果是「object」
;
BUG
:全部的值在計算中都以二進制編碼儲存,瀏覽器中把前三位000
的看成對象,而null
的二進制前三位是000
,因此被識別爲對象,可是他不是對象,他是空對象指針,是基本類型值)typeof
普通對象/數組對象/正則對象...
, 結果都是「object」
,這樣就沒法基於typeof
區分是普通對象
仍是數組對象``...
等了
- 已知有一個變量x,可是咱們沒法確認其數據類型,咱們須要有一個判斷操做:當x的類型是對象的時候(什麼對象均可以),則處理對應的事情
if (typeof x == "object") {
//=>null檢測結果也會是"object",因此結果是"object"不必定是對象,還多是null呢
...
}
複製代碼
能夠用👇的條件進行判斷bash
if (x != null && typeof x == "object") {
// ...
}
複製代碼
console.log(typeof []); //=>"object"學習
console.log(typeof typeof typeof []); //=>"string"編碼
需注意:spa
因爲`typeof`返回的結果永遠是一個字符串(字符串中包含了對應的類型),因此連續出現`兩個及兩個以上typeof檢測`的時候,最後結果都是` "string"` prototype