JavaScript

The typeof operator returns the data type of the value passed as an argument.

typeof 演算子

 JavaScriptには、変数や値のデータ型を調べるための演算子 typeof があります。この演算子は、引数に渡された値のデータ型を返します。データ型とは、プログラムで扱う値の種類のことです。JavaScriptには、主に以下の7つのデータ型があります。

  1. 基本型(プリミティブ型)
    • number(数値)
    • string(文字列)
    • boolean(真偽値)
    • underfined(未定義)
    • null(null)
  2. オブジェクト型
    • object(オブジェクト)
    • function(関数)

 typeof演算子は、これらのデータ型のうち、基本型と function型を判別することができます。object型は、typeof演算子で「object」という文字列が返されます。以下に、各データ型の例を示します。


typeof 42;            // number
typeof "hello";       // string
typeof true;          // boolean
typeof underfined;    // underfined
typeof null;          // object
typeof {};            // object
typeof function() {}; // function

 typeof演算子は、渡された引数が関数の場合、functionという文字列を返します。これは、JavaScriptにおいて関数がオブジェクトの一種であるためです。また、nullの場合は誤った結果が返されますが、これは JavaScriptの仕様によるものであり、バグではありません。

 typeof演算子は、変数や値のデータ型を調べるために使われます。例えば、以下のように使用します。


<script>
	let num = 42;
	console.log(typeof num);  // number
	
	let str = "hello";
	console.log(typeof str);  // string
	
	let bool = true;
	console.log(typeof bool); //boolean
</script>

 このように、typeof演算子を使用することで、変数や値のデータ型を確認することができます。

 また、typeof演算子は、変数が宣言されていない場合でもエラーを発生させず、underfinedを返します。例えば、以下のように未定義の変数を typeof演算子で調べることができます。


<script>
	console.log(typeof notDefined); // underfined
</script>

 typeof演算子は、主に以下のような場面で使用されます。

  1. 変数の型を確認する場合
  2. 引数の型を確認する場合
  3. 変数が null であるかどうかを確認する場合

 例えば、関数の引数の型を確認する場合は、以下のように typeof演算子を使用することができます。


<script>
	function greet(name) {
		if (typeof name === "string") {
			console.log("Hello, " + name + "!");
		} else {
			console.log("Invalid argument!");
		}
	}
	
	greet("Alice"); // Hello, Alice!
	greet(42);      // Invalid argument!
</script>

 このように、typeof演算子を使用することで、関数の引数の型を確認することができます。

 なお、typeof演算子は、オブジェクトの型を正確に判定できないため、オブジェクトの型を調べる場合は、instanceof演算子や Object.prototype.toStringメソッドを使用することが推奨されます。

 typeof演算子は、基本型とオブジェクト型を区別できないため、以下のような場合には注意が必要です。


<script>
	console.log(typeof "");                // string
	console.log(typeof new String(""));    // object
	console.log(typeof 0);                 // number
	console.log(typeof new Number(0));     // object
	console.log(typeof true);              // boolean
	console.log(typeof new Boolean(true)); // object
</script>

 上記のコードでは、基本型の値と、それをラップしたオブジェクトの typeof結果が異なっています。これは、JavaScriptの仕様によるものであり、基本型とそのラッパーオブジェクトは扱いが異なります。

 また、typeof演算子に関しては、以下のような制限もあります。

  1. typeof演算子は、変数に代入された値の型を調べるため、変数自体の型を調べることはできない。
  2. typeof演算子は、プロパティが存在しない変数や、underfinedなどの場合にも underfined を返す。

 例えば、以下のコードでは、typeof演算子は期待通りに動作しません。


<script>
	let x;
	console.log(typeof x);            // underfined
	
	let obj = {};
	console.log(typeof obj.property); // underfined
</script>

 このように、typeof演算子は基本型とオブジェクト型を区別できないため、注意が必要です。しかし、基本的な型の確認には便利な演算子であるため、JavaScriptで開発を行う際には頻繁に使用されます。

 最後に、typeof演算子で調べられる型の一覧をまとめておきます。

underfined
宣言されているが値が代入されていない変数、存在しない変数、未定義の関数など。
boolean
true/false の値を持つ Booleanオブジェクトまたはプリミティブ値。
number
数値を表す Numberオブジェクトまたはプリミティブ値。
bigint
大きな整数を表す Bigintオブジェクトまたはプリミティブ値。
string
文字列を表す Stringオブジェクトまたはプリミティブ値。
symbol
シンボルを表す Symbolオブジェクトまたはプリミティブ値。
object
オブジェクトを表すが、上記の基本型のうちに当てはまらないものや、オブジェクトリテラル、配列、nullなど。
function
関数オブジェクト。

 これらの型を調べる際には、typeof演算子を使用することができます。ただし、オブジェクト型をより正確に判定する場合には、上述のように instanceof演算子や Object.prototype.toStringメソッドを使用することが推奨されます。