JavaScriptは、2026年現在もウェブ開発における中心的な役割を果たしており、その進化は止まることがありません。
プログラムを記述する上で、データ型を正しく理解することは、バグの少ない堅牢なコードを書くための基本中の基本です。
近年では新しいデータ構造の提案や型判定のベストプラクティスも変化しており、最新の情報をキャッチアップしておく必要があります。
本記事では、JavaScriptにおけるデータ型の一覧から、それぞれの特徴、そして実務で欠かせない型判定の方法までを詳しく解説します。
JavaScriptにおけるデータ型の分類
JavaScriptのデータ型は、大きく分けて「プリミティブ型」と「オブジェクト型」の2種類に分類されます。
プリミティブ型は、一度作成するとその値を変更できない不変(イミュータブル)な値のことを指します。
一方でオブジェクト型は、複数の値や複雑なエンティティを保持するためのデータ構造であり、可変(ミュータブル)な特性を持ちます。
まずは、この2つの大きな違いを理解することが、JavaScriptのメモリ管理や値の扱いの理解につながります。
プリミティブ型とオブジェクト型の違い
プリミティブ型は、変数に値を直接格納する形式をとります。
そのため、変数から別の変数へ値を代入する際には「値のコピー」が行われます。
これに対し、オブジェクト型はメモリ上の参照(アドレス情報)を変数に格納します。
オブジェクトを別の変数に代入すると「参照のコピー」が行われるため、一方を変更するともう一方にも影響が及ぶ点に注意が必要です。
最新のプリミティブ型一覧
2026年現在のJavaScriptにおいて、プリミティブ型は以下の7つの基本型に集約されます。
以前から存在する型に加え、特定の用途で利用される比較的新しい型も含まれています。
Number(数値型)
整数および浮動小数点数を扱うための型です。
JavaScriptでは全ての数値が「64ビット倍精度浮動小数点数」として扱われます。
特別な値として、Infinity(無限大)やNaN(Not a Number:非数)もこのNumber型に含まれます。
const age = 25; // 整数
const price = 9.99; // 浮動小数点数
const notANumber = NaN; // 非数
console.log(typeof age);
console.log(typeof notANumber);
"number"
"number"
String(文字列型)
テキストデータを扱うための型です。
シングルクォート、ダブルクォート、またはバッククォート(テンプレートリテラル)で囲むことで定義します。
2026年現在もテンプレートリテラルによる変数展開や複数行記述が主流となっています。
const name = "ユーザー";
const message = `こんにちは、${name}さん。`; // テンプレートリテラル
console.log(message);
"こんにちは、ユーザーさん。"
Boolean(論理型)
論理的なエンティティを表し、true(真)とfalse(偽)の2つの値のみを持ちます。
主に条件分岐(if文)やループの制御に使用されます。
const isActive = true;
const hasPermission = false;
if (isActive) {
console.log("アクティブな状態です。");
}
"アクティブな状態です。"
Undefined(未定義型)
値を代入していない変数に自動的に割り当てられる値です。
「値が存在しない」という状態をシステム側が示すために使われます。
let data;
console.log(data);
undefined
Null(ヌル型)
「値が空であること」を意図的に示すために開発者が代入する値です。
undefinedと似ていますが、「意図的な欠如」を表現する際に使用するのが一般的です。
なお、typeof nullを実行すると歴史的経緯により"object"が返されるという有名な仕様があります。
const result = null;
console.log(result);
console.log(typeof result);
null
"object"
Symbol(シンボル型)
ES2015で導入された、一意で不変な識別子を作成するための型です。
オブジェクトのプロパティキーとして使用することで、他のコードと衝突しない名前を定義できます。
const uniqueKey = Symbol("description");
const obj = {
[uniqueKey]: "秘密のデータ"
};
console.log(obj[uniqueKey]);
"秘密のデータ"
BigInt(大きな整数型)
Number型で扱える上限(2の53乗マイナス1)を超える極めて大きな整数を扱うための型です。
数値の末尾にnを付けるか、BigInt()関数を使用して生成します。
const hugeNumber = 9007199254740991n;
const biggerNumber = hugeNumber + 1n;
console.log(biggerNumber);
9007199254740992n
オブジェクト型の特徴と主要な種類
プリミティブ型以外のものは、すべてオブジェクト型に分類されます。
オブジェクト型はプロパティの集合体であり、関数や配列もJavaScript内部ではオブジェクトの一種として扱われます。
Object(オブジェクト)
キーと値のペアを保持する最も基本的な構造です。
あらゆるデータの集まりを表現するのに適しており、他の多くのオブジェクトの基盤となっています。
const user = {
id: 1,
username: "dev_user",
login: function() {
console.log("ログインしました");
}
};
user.login();
"ログインしました"
Array(配列)
順序を持つ値のリストを管理するためのオブジェクトです。
添字(インデックス)を使用して要素にアクセスし、多彩な組み込みメソッドを利用してデータを操作できます。
const colors = ["red", "green", "blue"];
console.log(colors[0]);
console.log(colors.length);
"red"
3
Function(関数)
実行可能な処理の塊です。
JavaScriptでは、関数も「第一級オブジェクト」として扱われるため、変数に代入したり引数として渡したりすることが可能です。
const greet = function(name) {
return `Hello, ${name}`;
};
console.log(typeof greet);
"function"
データ型を判定する4つの方法
開発を進める中で、変数の型を動的に判定しなければならない場面は多々あります。
JavaScriptにはいくつかの型判定手法が存在しますが、用途に応じて適切に使い分けることが重要です。
1. typeof演算子による簡易判定
最も基本的で手軽な判定方法です。
プリミティブ型の判定には有効ですが、前述のnullの挙動や、配列を"object"と返してしまう点には注意が必要です。
console.log(typeof "text");
console.log(typeof 100);
console.log(typeof true);
console.log(typeof undefined);
"string"
"number"
"boolean"
"undefined"
2. instanceof演算子によるクラス判定
オブジェクトが特定のクラス(またはコンストラクタ)のインスタンスであるかどうかを判定します。
プロトタイプチェーンを遡ってチェックするため、自作クラスや組み込みクラスの判定に適しています。
const now = new Date();
console.log(now instanceof Date);
console.log(now instanceof Object);
true
true
3. Array.isArrayメソッドによる配列判定
対象が配列かどうかを確実に判定するための専用メソッドです。
typeofでは判別できない配列を特定する際に、現在最も推奨される方法です。
const list = [1, 2, 3];
console.log(Array.isArray(list));
console.log(Array.isArray({}));
true
false
4. Object.prototype.toStringによる詳細判定
より厳密に型を特定したい場合に用いられる手法です。
[object Type]という形式の文字列が返されるため、組み込みオブジェクトの種類を詳細に把握できます。
const checkType = (val) => Object.prototype.toString.call(val);
console.log(checkType([]));
console.log(checkType(new Date()));
console.log(checkType(null));
"[object Array]"
"[object Date]"
"[object Null]"
JavaScriptの型変換(型キャスト)
JavaScriptは動的型付け言語であり、状況に応じて自動的に型が変換される「暗黙的な型変換」が発生します。
意図しない挙動を防ぐためには、明示的に型を変換するスキルが求められます。
数値と文字列の変換
数値を文字列に変換する場合はString()関数やtoString()メソッドを使用します。
逆に文字列を数値にする場合はNumber()、parseInt()、あるいは単項プラス演算子を用いるのが一般的です。
const num = 123;
const strFromNum = String(num); // "123"
const str = "456";
const numFromStr = Number(str); // 456
真偽値への変換(TruthyとFalsy)
JavaScriptでは、Boolean型以外の値も、条件式の中ではtrueまたはfalseとして評価されます。
falseとして評価される値を「Falsyな値」と呼び、それ以外を「Truthyな値」と呼びます。
主要なFalsyな値には、false、0、""(空文字)、null、undefined、NaNが含まれます。
| 値 | Boolean評価結果 |
|---|---|
| true / false | そのまま |
| 0, -0, 0n | false |
| “abc” (空でない文字列) | true |
| “” (空文字) | false |
| null / undefined | false |
| [] (空の配列) | true |
| {} (空のオブジェクト) | true |
厳密な比較の重要性
型判定と深く関わるのが、比較演算子の使い分けです。
JavaScriptには==(等価演算子)と===(厳密等価演算子)の2種類があります。
等価演算子は比較時に自動的に型変換を行いますが、これが予期せぬ不具合の原因となるケースが多々あります。
2026年現在のモダンな開発現場では、原則として「===」を使用することが推奨されています。
console.log(1 == "1"); // true (型変換が行われる)
console.log(1 === "1"); // false (型が異なるため)
true
false
まとめ
JavaScriptのデータ型を正しく理解することは、効率的でミスのないプログラミングへの第一歩です。
本記事で紹介した7つのプリミティブ型とオブジェクト型の違い、そして適切な型判定方法をマスターすることで、複雑なデータ操作もスムーズに行えるようになります。
特に、typeofの限界やArray.isArrayの活用、そして厳密等価演算子の徹底は、実務において非常に重要なポイントです。
2026年以降も、JavaScriptの仕様は新しい機能を取り込みながら変化し続けていくでしょう。
基礎をしっかりと固めた上で、常に最新のトレンドやベストプラクティスを意識して開発に取り組んでください。
