Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

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 class C {} === '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 に準拠

仕様書

Specification Status Comment
ECMAScript 2017 Draft (ECMA-262)
The typeof Operator の定義
ドラフト  
ECMAScript 2015 (6th Edition, ECMA-262)
The typeof Operator の定義
標準  
ECMAScript 5.1 (ECMA-262)
The typeof Operator の定義
標準  
ECMAScript 3rd Edition (ECMA-262)
The typeof Operator の定義
標準  
ECMAScript 1st Edition (ECMA-262)
The typeof Operator の定義
標準 Initial definition. Implemented in JavaScript 1.1.

ブラウザ互換性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (有) (有) (有) (有) (有)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (有) (有) (有) (有) (有) (有)

その他の例外的な実装

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

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

typeof alert === 'object' //true

関連項目

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

 このページの貢献者: lv7777, hayato, teoli, ethertank, Potappo
 最終更新者: lv7777,