前面我們學習了JS中的資料型別:
基礎資料型別:
number
、string
、boolean
、null
、undefined
、symbol
、BigInt
引用資料型別:
object(普通物件、陣列物件、正則物件、日期物件...)
、function
今天我們簡單介紹下JS中資料型別檢測中的typeof
1、JS中的資料型別檢測方法:
tyepof [value]
:檢測資料型別的運算子[example] instanceof [class]
: 檢測某一個例項是否屬於這個類[example].constructor===[class]
:檢測例項和類關係的,從而檢測資料型別Object.prototype.toString.call([value])
:檢測資料型別
2、typeof
- 定義:用來檢測資料型別的運算子
- 語法:
tyepof [value]
- 返回值:
typeof
檢測的結果首先是一個字串;- 字串中包含了對應的資料型別(例如:
“number”
、“string”
、“boolean”
、“undefined”
、“object”
、“function”
、“symbol”
、“bigint”
)
3、typeof檢測的侷限性(特殊值)
- 1、
NaN
/Infinity
都是數字型別的,檢測結果都是“number”
; - 2、
typeof null
的結果是“object”
;- (這是瀏覽器的
BUG
:所有的值在計算中都以二進位制編碼儲存,瀏覽器中把前三位000
的當作物件,而null
的二進位制前三位是000
,所以被識別為物件,但是他不是物件,他是空物件指標,是基本型別值)
- (這是瀏覽器的
- 3、
typeof
普通物件/陣列物件/正則物件...
, 結果都是“object”
,這樣就無法基於typeof
區分是普通物件
還是陣列物件``...
等了
4、應用場景
- 已知有一個變數x,但是我們無法確認其資料型別,我們需要有一個判斷操作:當x的型別是物件的時候(什麼物件都可以),則處理對應的事情
if (typeof x == "object") {
//=>null檢測結果也會是"object",所以結果是"object"不一定是物件,還可能是null呢
...
}
複製程式碼
可以用?的條件進行判斷
if (x != null && typeof x == "object") {
// ...
}
複製程式碼
5、練習題
console.log(typeof []); //=>"object"
console.log(typeof typeof typeof []); //=>"string"
需注意:
由於`typeof`返回的結果永遠是一個字串(字串中包含了對應的型別),所以連續出現`兩個及兩個以上typeof檢測`的時候,最後結果都是` "string"`