mozilla
您的搜尋結果

    typeof

    摘要

    typeof 運算子會傳回一個字串值, 指出未經運算 (unevaluated) 的運算元所代表的型別。

    運算子
    實作於: JavaScript 1.1
    ECMA 版本: ECMA-262 (以及 ECMA-357 for E4X objects)

    語法

    typeof 之後面跟著它的唯一運算元:

    typeof operand

    參數

    operand 表示式代表傳入的物件或原始型別。

    說明

    下表摘要列出了 typeof 可能的傳回值:

    型別 傳回
    Undefined "undefined"
    Null "object"
    Boolean "boolean"
    Number "number"
    String "string"
    主機端物件 (由 JS 執行環境提供) 視實作方式而異
    Function 物件 (實作 ECMA-262 所定義的 [[Call]]) "function"
    E4X XML 物件 "xml"
    E4X XMLList 物件 "xml"
    所有其它物件 "object"

    範例

    一般情況

    // Numbers
    typeof 37 === 'number';
    typeof 3.14 === 'number';
    typeof Math.LN2 === 'number';
    typeof Infinity === 'number';
    typeof NaN === 'number'; // 雖然是 "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'; // 但是不要使用這種方式!
    
    // Undefined
    typeof undefined === 'undefined';
    typeof blabla === 'undefined'; // 一個 undefined 變數
    
    // Objects
    typeof {a:1} === 'object';
    typeof [1, 2, 4] === 'object'; // 請使用 Array.isArray 或者 Object.prototype.toString.call 以區分正規運算式和陣列
    typeof new Date() === 'object';
    
    typeof new Boolean(true) === 'object'; // 這樣會令人混淆。不要這樣用!
    typeof new Number(1) === 'object'; // 這樣會令人混淆。不要這樣用!
    typeof new String("abc") === 'object';  // 這樣會令人混淆。不要這樣用!
    
    // Functions
    typeof function(){} === 'function';
    typeof Math.sin === 'function';
    

    null

    typeof null === 'object'; // 自從有 JavaScript 開始就是這樣了
    

    自從 JavaScript 一開始出現, JavaScript 的值就總以型別標簽跟著一個值的方式表示。物件的型別標簽是 0. 而 null 這個值是使用 NULL 指標 (在大部份平台上是 0x00) 來表示. 因此, null 看起來像是一個以 0 為型別標簽的值, 並使得 typeof 傳回不甚正確的結果. (reference needed)

    這個問題已計畫在下一版 ECMAScript 予以修正 (會以 opt-in 方式提供). 屆時它將會做出如 typeof null === 'null' 的正確回傳結果。

    註: 此修正計畫已被拒絕

    正規表示式 (Regular expressions)

    可呼叫的正規表示式在某些瀏覽器上面必須借助非正式插件 (need reference to say which).

    typeof /s/ === 'function'; // Chrome 1-12 ... // 不符合 ECMAScript 5.1 (譯註: 在新版 Chrome 已修正為 'object')
    typeof /s/ === 'object'; // Firefox 5+ ...    // 符合 ECMAScript 5.1
    

    其它怪異輸入 (quirks)

    舊版 Internet Explorer 請留意 alert 函數

    在 IE 6, 7 和 8, typeof alert === 'object'

    註: 這並不怪異。這是實情。在許多較舊的 IE 中, 主機端物件的確是物件, 而非函數

    規格

    ECMA-262 section 11.4.3

    參照

    Document Tags and Contributors

    Contributors to this page: Johnny.Net, teoli
    最近更新: teoli,