mozilla
Your Search Results

    typeof 演算子

    概要

    typeof 演算子は、評価を行われないままの状態のオペランドのデータ型を示す文字列を返します。

    構文

    typeof 演算子の後に、オペランドを続けて書きます。

    typeof operand

    パラメーター

    operand は、そのデータ型を返してほしいオブジェクトやプリミティブを表す式。

    説明

    以下は typeof が返す事が出来る値(文字列)の一覧表です。 JavaScript data structureにデータ型(types)とプリミティブについての詳しい情報があります。

    戻り値
    未定義 "undefined"
    Null "object"
    真偽値 "boolean"
    数値 "number"
    文字列 "string"
    シンボル (ECMAScript6 で新しく導入) "symbol"
    ホストオブジェクト (provided by the JS environment) 実装に委ねる
    関数オブジェクト (implements [[Call]] in ECMA-262 terms) "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'; // but never use this form!
    
    // Strings
    typeof "" === 'string';
    typeof "bla" === 'string';
    typeof (typeof 1) === 'string'; // typeof はいつも文字列を返します
    typeof String("abc") === 'string'; // but never use this form!
    
    // Booleans
    typeof true === 'boolean';
    typeof false === 'boolean';
    typeof Boolean(true) === 'boolean'; // but never use this form!
    
    // 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';
    
    // Functions
    typeof function(){} === 'function';
    typeof Math.sin === 'function';
    

    null

    typeof null === 'object'; // JavaScript の誕生当初から成り立つ

    JavaScript の最初の実装では、値は、型を表す「タグ」と「値そのもの」で表されていました。 オブジェクトの型タグは 0 で。そして null のそれは NULL ポインタ(0x00 は殆どのプラットフォームに存在する)で示されていました。その為 Null の型タグは 0 と見做され、「typeof Null は "object"」という、悪い冗談の様な結果になったのです。(出典はこちら)

    この挙動はECMAScriptにオプトインとして提案されましたが、却下されました。この変更が通れば、 typeof null は 'null' を返すようになるはずでした。

    正規表現

    呼び出し可能な正規表現オブジェクに対して、 typeof 演算子はいくつかのブラウザで標準的でない挙動を示します。

    typeof /s/ === 'function'; // Chrome 1-12 ... // ECMAScript 5.1 に準拠していない
    typeof /s/ === 'object'; // Firefox 5+ ...    // ECMAScript 5.1 に準拠

    その他の例外的な実装

    古いバージョンの Internet Explorer の alert

    IE6、IE7、IE8 は以下の様な実装となっています。

    typeof alert === 'object' //true

    仕様

    仕様 ステータス コメント
    ECMAScript 1st Edition. Standard 最初の定義。JavaScript 1.1で実装。
    ECMAScript 5.1 (ECMA-262)
    The definition of 'The typeof Operator' in that specification.
    Standard  
    ECMAScript 6 (ECMA-262)
    The definition of 'The typeof Operator' in that specification.
    ドラフト  

    こちらも参照

    • instanceof

    ドキュメントのタグと貢献者

    Contributors to this page: hayato, Potappo, ethertank, teoli
    最終更新者: hayato,
    サイドバーを隠す