typeof返回值詳解

Miofly發表於2019-11-21

typeof 操作符返回一個字串

typeof 可能的返回值

型別結果
Undefinedundefined
Nullobject
Booleanboolean
Numbernumber
BigIntbigint
Stringstring
Symbolsymbol
Functionfunction
其他任何物件object

number 

// 數值
typeof(42) === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 儘管它是 "Not-A-Number" (非數值) 的縮寫
typeof Number(1) === 'number'; // Number 會嘗試把引數解析成數值

bigint 

typeof 42n === 'bigint';

 string

// 字串
typeof '' === 'string';
typeof `template literal` === 'string';
typeof '1' === 'string'; // 注意內容為數字的字串仍是字串
typeof (typeof 1) === 'string'; // typeof 總是返回一個字串
typeof String(1) === 'string'; // String 將任意值轉換為字串,比 toString 更安全

 bollean

// 布林值
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(1) === 'boolean'; // Boolean() 會基於引數是真值還是虛值進行轉換
typeof !!(1) === 'boolean'; // 兩次呼叫 ! (邏輯非) 操作符相當於 Boolean()

symbol 

// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

undefined

// Undefined
typeof undefined === 'undefined';
typeof undeclaredVariable === 'undefined'; 

object

typeof {a: 1} === 'object';
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
typeof /regex/ === 'object';
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String('abc') === 'object';

function

typeof function() {} === 'function';
typeof class C {} === 'function'
typeof Math.sin === 'function';
typeof console.log // 'function'

null:雖然 typeof null 會輸出 object,但是這只是 JS 存在的一個悠久 Bug。在 JS 的最初版本中使用的是 32 位系統,為了效能考慮使用低位儲存變數的型別資訊,000 開頭代表是物件然而 null 表示為全零,所以將它錯誤的判斷為 object 。

typeof null === 'object';

除 Function 外的所有建構函式的型別都是 'object'

var str = new String('String');
var num = new Number(100);

typeof str; // 返回 'object'
typeof num; // 返回 'object'

var func = new Function();

typeof func; // 返回 'function'

語法中的括號

// 括號有無將決定表示式的型別。
var iData = 99;

typeof iData + ' Wisen'; // 'number Wisen'
typeof (iData + ' Wisen'); // 'string'

es6之前typeof 總能保證對任何所給的運算元返回一個字串。即便是沒有宣告的識別符號,typeof 也能返回 'undefined'
es6加入了塊級作用域的 let 和 const 之後,在其被宣告之前對塊中的 let 和 const 變數使用 typeof 會丟擲一個 ReferenceError。

typeof newConstVariable; // ReferenceError
const newConstVariable = 'hello';

 

相關文章