typeof

オペランド(対象となる変数等のこと)の型を示す文字列を返します。

文法

typeof演算子の後に、そのオペランド(対象)が続きます。

typeof operand

operandは、型を返したいオブジェクトを表す式、またはプリミティブを指定します。

説明

下記のテーブルは、typeofが返す可能性のある値の要約になります。 型とプリミティブについての詳細な情報については、 JavaScriptのデータ構造ページを参照してください。

結果
未定義 "undefined"
Null "object" (詳細は後述)
真偽値 "boolean"
数値 "number"
文字列 "string"
シンボル (ECMAScript 6で追加) "symbol"
Hostオブジェクト (JS環境によって提供) 実装依存
関数オブジェクト (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';       // "数値では無い"にも関わらず…
typeof Number(1) === 'number'; // この形式は使用しないでください!


// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string';    // typeof always return a string
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';


// Functions
typeof function(){} === 'function';
typeof Math.sin === 'function';

null

// 初期のJavaScriptから、これが成り立ちます。
typeof null === 'object';

JavaScriptの最初の実装では、JavaScriptの値は、型のタグと値として表されていました。 オブジェクトの型のタグは0を、 nullはNULLポインタとして表されていました。(多くのプラットフォームで0x00) その結果、nullは型のタグとして0を持ち、このために不法なtypeofの戻り値になってしまいました。 (参照: The history of “typeof null”)

ECMAScriptに修正が(オプトインを介して)提案されましたが、却下されました。 提案が受け入れられていれば、typeof null === 'null'という結果になっていたでしょう。

正規表現

呼び出し可能な正規表現で、幾つかのブラウザで非標準な動きをします。

typeof /s/ === 'function'; // Chrome 1~12は、ECMAScript 5.1に準拠していません。
typeof /s/ === 'object';   // Firefox 5~は、ECMAScript 5.1に準拠。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本

IE host objects are objects not functions

IEの6、7、8の多くのホストオブジェクトは、オブジェクトであり関数ではありません。 下記はそれを示す一例になります。

typeof alert === 'object'

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。