JS中資料型別檢測方法——typeof

金色小芝麻發表於2020-03-07

前面我們學習了JS中的資料型別:

  • 基礎資料型別:numberstringbooleannullundefinedsymbolBigInt

  • 引用資料型別: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”

JS中資料型別檢測方法——typeof

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"`

思維導圖:

JS中資料型別檢測方法——typeof

相關文章