データ型

この記事では、JavaScriptのデータ型について解説する。

データ型を理解することで、変数にどのような値が入れられるのか、どのような計算ができるのかがわかる。

この記事で学ぶこと:

  • データ型について
  • JavaScriptのデータ型
  • typeof
  • 型変換

データ型について

データ型とは、プログラムが扱うデータの種類やその使い方を決めるものである。

JavaScriptは動的型付け言語なので、変数などの宣言に型を指定する必要はない。

値を代入すると、JavaScriptが自動的に適切な型を判断してくれる。

動的型付け言語の他に静的型付け言語がある。

データ型を正しく理解していないと、条件分岐やループ処理で予期せぬ不具合を起こす可能性がある。

特に、文字列と数値の混同はよくある間違いなので注意が必要である。

JavaScriptの型

JavaScriptには以下のプリミティブ型(基本的なデータ型)がある。

JavaScriptの主なデータ型
データ型 説明
文字列型 (String) テキストデータ "hello", '太郎'
数値型 (Number) 整数・小数 123, 3.14
論理型 (Boolean) 真偽値 true, false
Null型 値が存在しない null
Undefined型 値が未定義 undefined

文字列型

文字列型はテキストデータを表す。

文字列型を宣言するためには:

  • "":(ダブルクォート)
  • '':(シングルクォート)
  • ``:(バッククォート)

これのいずれかでデータを囲む。

文字列型の変数を宣言するときは以下の書き方をする。


const a = "hello";
const b = '太郎';
const c = `12345`;

よくある間違い

異なるクォーテーションで囲む:


const a = "hello'   // エラー(開始と終了が異なる)
const b = '太郎`    // エラー(開始と終了が異なる)
const c = "12345";  // OK(ダブルクォートで統一)

数値型

数値型はその名の通り数値を表す。

数値の範囲には制限があり、安全に格納できる範囲は 「-(253-1)」 ~ 「253-1」 である。

数値型の変数を宣言するときは以下の書き方をする。


const a = 12;
const b = 3.14;

よくある間違い

文字列と数値の混同:


console.log(1 + 2);     // 3 (数値の足し算)
console.log(1 + "2");   // "12" (文字列の連結)
console.log("1" + "2"); // "12" (文字列の連結)

論理型

論理型(Boolean)は真偽値を表すデータ型である。

論理型の変数を宣言するときは以下の書き方をする。


const a = true;
const b = false;

Null型

Null型には、値がnullの1つしかない。

nullは「値が存在しない」ことを意図的に示すために使う。

主にオブジェクトが存在しないことを表す際に使用する。

※オブジェクトの詳細は「オブジェクト」の記事にまとめる。

Undefined型

Undefined型には、値がUndefinedの1つしかない。

undefinedは「値が未定義」であることを示す。

変数を宣言したが、まだ値を代入していない状態である。

初期化を伴わない変数宣言は、暗黙的にundefinedに初期化する。


let a;      // aにはundefinedが入る。
const b;    // エラー(constは宣言と同時に値を決める必要があるから、エラーになる)

null と undefined の違い:

  • null:意図的に「値がない」ことを示す(プログラマが設定)
  • undefined:値がまだ設定されていない(システムが自動設定)

let a;          // undefined(値を設定していない)
let b = null;   // null(意図的に「値なし」を設定)

typeofについて

typeof演算子は変数の現在の型を調べるために使用する。

以下に使用例を示す。


const a = 123;
const b = "hello";
const c = true;
const d = null;
let e;

console.log(typeof a);      // number
console.log(typeof b);      // string
console.log(typeof c);      // boolean
console.log(typeof d);      // object
console.log(typeof e);      // undefined

typeofの注意点:

typeof null"object" を返すが、これはJavaScriptの歴史的なバグである。

nullはオブジェクトではなく、Nullである。


console.log(typeof null);       // "object"(バグによる誤った結果)

型変換について

JavaScriptでは自動的に型変換を行う(暗黙的変換)場合と、プログラマが明示的に型変換を行う場合がある。

文字列型の型変換

暗黙的な型変換

文字列型と他の型を「+」で結合すると、自動的に文字列に変換される。


console.log("a = " + 1);        // "a = 1" (1が暗黙的に文字列に変換される)
console.log("合計: " + 100);    // "合計: 100" (100が文字列に変換される)
console.log(true + " です");    // "true です" (trueが文字列に変換される)

明示的な型変換

String()関数やtoString()メソッドを使って、明示的に文字列を変換できる。


String(1);      // "1" (数値を文字列に変換)
String(true);   // "true" (論理値を文字列に変換)

const a = 3.14;
a.toString();   // "3.14" (数値を文字列に変換)

数値型の型変換

暗黙的な型変換

数値型の型変換を行う場合、以下のような例だと自動的に数値型に変換される。


console.log("1" - 1);       // 0
console.log("2" * 5);       // 10
console.log(10 / "5");      // 2

「+」以外の演算子は、文字列型と数値型で計算すると文字列型を数値型に変換して、計算結果を返す。

明示的な型変換

Number()関数を使って、明示的に数値に変換できる。


Number("123");                  // 123 (文字列を数値に変換)

const a = "5";
console.log(Number(a) + 3);     // 8 (aの値を数値に変換するので、加算を行う。)

演習問題

ここまでの内容を理解できたか、実際に手を動かして確認しよう。

演習1:データ型の基本

論理型・文字列型・数値型、それぞれの変数を宣言してみよう。

解答

const a = true;
const b = "太郎";
const c = 123;

演習2:typeofの基本

演習1で宣言した変数の型を出力するプログラムを作ってみよう。

解答

console.log(typeof a);
console.log(typeof b);
console.log(typeof c);

演習3:文字列の型変換

演習1で宣言した、論理型・数値型を文字列に明示的に変換して、出力するプログラムを作ってみよう。

解答

// 論理型を文字列に変換
console.log(String(a));         // "true"
console.log(a.toString());      // "true"

// 数値型を文字列に変換
console.log(String(c));         // "123"
console.log(c.toString());      // "123"

演習4:数値型の型変換

文字列型で宣言した数値を数値型に明示的に変換して、四則演算の結果を出力するプログラムを作ってみよう。

解答

const a = "10";
const b = "5";
console.log(Number(a) + Number(b));
console.log(Number(a) - Number(b));
console.log(Number(a) * Number(b));
console.log(Number(a) / Number(b));

まとめ

この記事では、JavaScriptの以下のことを学んだ

  • データ型:プログラムが扱うデータの種類やその使い方を決めるもの
  • JavaScriptの型:論理型・文字列型・数値型・Null型・Undefined型の使い方
  • typeof:変数の型を調べる方法
  • 型変換:暗黙的・明示的型変換の方法