JS typeof的用法

2020-07-16 10:05:28
typeof 是一個運算子,用來檢測給定的變數或值的資料型別,返回的值為運算元的資料型別名稱,是一個字串結果。

使用格式如下:

typeof 運算元

說明:運算元可以是變數,也可以是具體的某個值(即字面量),返回值有以下幾種:
  • undefined:表示運算元為未定義;
  • boolean:表示運算元為布林值;
  • string:表示運算元為字串;
  • number:表示運算元為數位;
  • object:表示運算元為物件或陣列;
  • function:表示運算元為函數。

注意:函數也是一種物件,但 typeof 將函數視為特殊情況,所以檢測函數時,返回的結果為 function,而不是 object。

使用 typeof 運算子檢測資料型別的範例如下:
var miaov = 'ketang'; //宣告變數,同時給變數賦值
console.log( typeof miaov );  //檢測變數miaov,結果為:string
console.log( typeof 1 );  //檢測數位1,結果為:number
console.log( typeof true );   //檢測true,結果為:boolean
console.log( typeof false );  //檢測false,結果為:boolean
console.log( typeof undefined );  //檢測undefined,結果為:undefined
console.log( typeof null );  //檢測null,結果為:object
console.log( typeof {} );  // 檢測物件,結果為:object
console.log( typeof [] );  //檢測陣列,結果為:object
function func(){} //定義函數
console.log( typeof func );  //檢測func函數型別,結果為:'function'

從程式碼的執行結果中看到,屬於基本資料型別的 null,使用 typeof 檢測時,結果卻是 object,這似乎是說 null 應該屬於參照型別。之所以出現這樣結果,原因是:JavaScript 中的值在機器中都以二進位制來表示,在 JavaScript 最初的實現中,JavaScript 中的值在機器中以 32 位單位儲存,儲存的值包括一個型別的標誌和實際資料值兩部分內容,型別標誌使用低位的 1~3 三位來表示的。

物件的型別標誌是低三位的 000。由於 null 代表的是空指標(大多數平台下值為 0x00),因此,typeof 會把 null 對應的二進位制中的低三位 000 看成是物件的型別標誌,從而錯誤地返回了 object。