typeof運算子返回一個字串,表示未經求值的操作數(unevaluated operand)的類型。
語法
typeof operand
參數
operand 是一個表達式,表示物件或原始值,其類型被返回。
描述
此表總結了 typeof 可能的返回值。更多有關類型和原始值的訊息,可查看 JavaScript資料結構 頁面。
類型 結構
Undefined "undefined"
Null "object" (見下方)
布爾值 "boolean"
數值 "number"
字串 "string"
Symbol (ECMAScript 6 新增) "symbol"
宿主物件(JS環境提供的,比如瀏覽器) Implementation-dependent
函式物件 (implements [[Call]] in ECMA-262 terms) "function"
任何其他物件 "object"
例子
常規用法
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 儘管NaN是"Not-A-Number"的縮寫,意思是"不是一個數字"
typeof Number(1) === 'number'; // 不要這樣使用!
// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof返回的肯定是一個字串
typeof String("abc") === 'string'; // 不要這樣使用!
// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 不要這樣使用!
// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';
// Undefined
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // 一個未定義的變數,或者一個定義了卻未賦初值的變數
// Objects
typeof {a:1} === 'object';
// 使用Array.isArray或者Object.prototype.toString.call方法可以從基本的物件中區分出陣列類型
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// 下面的容易令人迷惑,不要這樣使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';
// 函式
typeof function(){} === 'function';
typeof Math.sin === 'function';
null
// 從JavaScript一開始出現就是這樣的
typeof null === 'object';
在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示類型的標籤和實際資料值表示的。物件的類型標籤是0。由於 null 代表的是空指針(大多數平台下值為0x00),因此,null的類型標籤也成為了0,typeof null就錯誤的返回了"object".(reference)
該現象有待於在ECMAScript 6中被修復 (該提議已被否決). 正確的返回值將成為 typeof null === 'null'.
正則表達式
對正則表達式字面量的類型判斷在某些瀏覽器中不符合標準:
typeof /s/ === 'function'; // Chrome 1-12 , 不符合 ECMAScript 5.1
typeof /s/ === 'object'; // Firefox 5+ , 符合 ECMAScript 5.1
沒有留言:
張貼留言