JavaScript
The typeof operator returns the data type of the value passed as an argument.
typeof 演算子
JavaScriptには、変数や値のデータ型を調べるための演算子 typeof があります。この演算子は、引数に渡された値のデータ型を返します。データ型とは、プログラムで扱う値の種類のことです。JavaScriptには、主に以下の7つのデータ型があります。
- 基本型(プリミティブ型)
-
- number(数値)
- string(文字列)
- boolean(真偽値)
- underfined(未定義)
- null(null)
- オブジェクト型
-
- 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演算子は、主に以下のような場面で使用されます。
- 変数の型を確認する場合
- 引数の型を確認する場合
- 変数が 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演算子に関しては、以下のような制限もあります。
- typeof演算子は、変数に代入された値の型を調べるため、変数自体の型を調べることはできない。
- 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メソッドを使用することが推奨されます。