データ型
JavaScript の値には、大きく分けて「プリミティブ型」と「参照型」の 2 種類があります。
プリミティブ型(基本型)
プリミティブ型は 全部で 7 種類 あり、単純な値そのものを表します。
-
数値型(Number)
let num = 42; // 整数let float = 3.14; // 小数let infinity = Infinity; // 無限大let notANumber = NaN; // Not a Number(数値ではない) -
文字列型(String)
let str1 = "二重引用符の文字列";let str2 = '一重引用符の文字列';let str3 = `テンプレートリテラル: ${num}`; // 変数を埋め込み可能 -
論理型(Boolean)
let isTrue = true;let isFalse = false; -
未定義(undefined) — まだ値が割り当てられていない状態
let undefinedVar;console.log(undefinedVar); // undefined -
ヌル(null) — 「値が無い」ことを意図的に表す
let emptyValue = null; -
シンボル(Symbol) — ES6 で追加された一意の値
let uniqueKey = Symbol('description'); -
BigInt — 大きな整数を扱う型
let bigNumber = 1234567890123456789012345678901234567890n;
undefined は「まだ値を入れていない(システムが自動的に設定する)」状態、null は「値が無いことを開発者が意図的に示す」状態です。どちらも「値が無い」ですが、使う場面が異なります。
参照型(オブジェクト型)
参照型は、複数の値やより複雑なデータ構造を持つことができます。
-
オブジェクト(Object)
let person = {name: "田中",age: 30,isStudent: false}; -
配列(Array)
let fruits = ["りんご", "バナナ", "オレンジ"]; -
関数(Function)
function greet() {return "こんにちは!";}
プリミティブ型は単純な値そのものを表し、参照型は複数の値をまとめて扱えます。プリミティブ型はコピーすると値そのものが複製されますが、参照型はコピーすると「同じ実体を指す参照」が共有される、という違いもあります。
型の確認方法
typeof 演算子を使うと、値の型を文字列で確認できます。
console.log(typeof 42); // number
console.log(typeof "hello"); // string
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof null); // object (歴史的なバグ。下記参照)
console.log(typeof {}); // object
console.log(typeof []); // object (配列もオブジェクトの一種)
console.log(typeof function(){}); // function
null と配列の正しい判定
typeof では null も配列も "object" になってしまうため、判定には別の方法を使います。
// null かどうかは === で判定する
const value = null;
console.log(value === null); // true
// 配列かどうかは Array.isArray() で判定する
console.log(Array.isArray([1, 2, 3])); // true
console.log(Array.isArray({})); // false
これは JavaScript 初期の実装に由来する 歴史的なバグ です。値の内部表現には型を示すタグが付いており、オブジェクトのタグが 0、null も 0 で表現されていたため「オブジェクト」と判定されてしまいました。すでに大量のコードがこの挙動に依存しているため、後方互換性のために修正されずに残っています。null 判定には value === null を使いましょう。
次に読む
- 条件分岐 — データ型ごとの値を使って処理を分岐させる