JavaScript: JavaScriptのデータ型
最終更新:2026-10-13
データ型は実行できる操作を決定します。数値は算術を、文字列は結合を、ブール値は条件分岐をサポートします。型を理解することは、JSの最も有名な落とし穴を避ける助けになります。
1. JSのデータ型
JavaScriptには8つのデータ型があり、プリミティブ型と参照型に分類されます:
プリミティブ型(7種類):String、Number、BigInt、Boolean、Undefined、Null、Symbol
参照型(1種類):Object(配列、関数、日付などはすべてObjectのサブタイプ)
プリミティブデータはスタックメモリに格納され、代入時に値がコピーされます。参照型データはヒープメモリに格納され、代入時に参照(アドレス)がコピーされます。この区別は後のレッスンで詳しく扱います。
typeofはデータ型をチェックし、文字列を返す演算子です:
| 値 | typeofの結果 |
|---|---|
"hello" |
"string" |
42 |
"number" |
9007199254740991n |
"bigint" |
true |
"boolean" |
undefined |
"undefined" |
null |
"object"(歴史的なバグ) |
{ } |
"object" |
function(){} |
"function" |
注意:typeof nullは"object"を返します。これはJS誕生時からの歴史的なバグで、修正することはできません(変更すると既存のコードが壊れるため)。覚えておきましょう。
2. 文字列と数値の落とし穴
JSの+演算子は2つの目的を持ちます:数値の加算と文字列の結合です。+の片方が文字列の場合、JSはもう片方の値も文字列に変換します:
"5" + 3は"53"になる(文字列結合、計算ではない)5 + 3は8になる(数値の加算)"5" - 3は2になる(引き算には結合の意味がないため、自動的に数値に変換される)
これはJSの最も有名な落とし穴の一つで、初心者は誰もが引っかかります。対策:計算前にNumber()やparseInt()で明示的に変換することです。
3. nullとundefined
どちらも「値なし」を意味しますが、意図が異なります:
- undefined:変数は宣言されたが代入されていない、またはプロパティが存在しない — 「まだ値が与えられていない」
- null:開発者が明示的に空に設定した — 「意図的に何もなしに設定した」
こう考えましょう:undefinedは家具のない新しい家で、nullは家具をわざとすべて運び出した状態です。
▶ サンプル:さまざまな型でのtypeof
▶ 試してみよう▶ サンプル:文字列と数値の落とし穴
▶ 試してみよう▶ サンプル:nullとundefined
▶ 試してみよう▶ サンプル:全データ型一覧
▶ 試してみよう❓ よくある質問
Q なぜ
typeof nullは"object"を返すのですか?A これはJSの初版からの歴史的なバグです。当時、JSは下位ビットで型を識別しており、
nullの下位ビットはすべてゼロで、オブジェクト識別子と同じだったため、誤分類されました。後で修正を試みましたが、変更すると既存のコードが多すぎるため壊れるので、バグは永久に残りました。基礎が曲がった建物のようなもの — 住人が多すぎて取り壊せません。Q 値が配列かプレーンオブジェクトかをどう区別しますか?
A
typeofは配列とオブジェクトの両方に"object"を返すため、区別できません。正しい方法はArray.isArray()です。例えば、Array.isArray([1,2])はtrueを返し、Array.isArray({})はfalseを返します。Q NaNの型は何ですか?
A
NaN(Not a Number)のtypeof NaNは"number"を返します。さらに奇妙なことに、NaN === NaNはfalseを返し、自分自身とも等しくありません。NaNのチェックにはisNaN()やNumber.isNaN()を使いましょう。📖 まとめ
- JSには8つのデータ型がある:7つのプリミティブ型 + 1つの参照型(Object)
typeof演算子は型をチェックするが、typeof nullは"object"を返す — 歴史的なバグ+は文字列が絡むと結合になる —"5" + 3は8ではなく"53"になるnullは「意図的に空」、undefinedは「まだ値なし」 — 厳密には等しくない- 計算前に
Number()やparseInt()で明示的に変換し、暗黙の型変換の落とし穴を避ける - 配列
[]もtypeofでは"object"を返す —Array.isArray()で区別する
📝 練習問題
- 基礎:6つのプリミティブ型(String、Number、Boolean、Undefined、Null、Object)の変数を6つ宣言し、それぞれに
typeofを適用して、結果をページに表示してください。 - 中級:入力フィールドを持つページを作成してください。ユーザーが任意の値を入力すると、JSがtypeofで型を検出し、結果を表示します。数値、文字列、true、nullなどを入力して、typeofの出力を観察してみましょう。
- 上級:型変換のクイズページを作成してください。
"1" + 2の結果やnull == undefinedがtrueかfalseかなど、型変換の知識を問う5つの選択肢問題を用意し、ユーザーが選択肢をクリックすると正解/不正解と説明を表示してください。