あらゆるプログラミング言語には、それぞれの言語によって異なったデータ構造が存在します。コードを書くうえで、それらのデータの構造を理解することは必要不可欠です。

当記事では、JavaScriptで扱うデータ型の種類と性質について紹介します。

JavaScriptのデータ型

JavaScriptのデータ型は、「プリミティブ型」と「オブジェクト型」の2つに分けられます。
プリミティブ型は、文字列や数値などの値そのものを管理する不変のデータ型です。つまり、根本的な値であるため、基本の型と言えます。

一方で、オブジェクト型は、値そのものを持っているわけではなく、配列や関数などの複数の変数の集まりとなります。いわゆる複合型です。また、可変のデータ型であることが定義されており、様々な形式を活用することができます。

まずは、プリミティブ型は不変な値を持ち、オブジェクト型は可変であることに注目しておくと良いでしょう。ここからは、プリミティブ型について詳しく解説していきます。

プリミティブ型

プリミティブ型は、変更できない値を持っていることが定義付けられています。
数値であれば「10」という値、文字列であれば「’Hello’」という値などが該当します。オブジェクト型であれば値を変更することができますが、プリミティブ型は既存の値をこれ以上変更することができません。

プリミティブ型の種類は、以下の通りです。

  • 数値(Number)
  • 文字列(String)
  • 論理値(Boolean)
  • Null
  • Undefined
  • シンボル(Symbol)

一つずつみていきましょう。

数値(Number)

プログラミングにおける数値は、「10」や「210」などの整数と、「8.5」や「10.21」などの小数に分類され、さらに値を表現するためにビット数などが使われます。

「整数」「小数」「ビット数」によって数値の型を区別するプログラミング言語もありますが、JavaScriptにおける数値の型は、「IEEE754倍精度浮動小数点数(64ビット)」と1種類のみです。
つまり、JavaScriptの数値は小数で表されるということです。

サンプルコードをみてみましょう。

const a = 10;
const b = 20;
console.log(a + b);

出力結果

30;

予測できるように、単純に10+20で、「30」という出力結果が出ます。しかし、これは表示の問題であり、内部では「30.0」という結果になっているのです。

では、以下ではどのような計算結果となるでしょうか。

const a = 0.1;
const b = 0.2;
console.log(a + b);

出力結果

0.30000000000000004;

Javascript primitive

単純に計算すると「0.3」となりますが、JavaScriptでは「0.30000000000000004」という結果になります。これには、64ビットの範囲内で小数を表現するための、IEEE754倍精度浮動小数点数という表現規格が関係しているからです。
数値には、コンピューターで表現できるものとそうでないもの(πなど)が存在し、数値の精度にも限りがあります。そのため、近似値に当てはめて計算を行い、このような結果が出るのです。

データ型を調べるには、typeof演算子を用います。数値のデータ型の場合は、numberが返ることがわかります。

const a = 0.1;
const b = 0.2;
console.log(typeof(a + b)); 

Javascript primitive

文字列(String)

文字列は、連続した文字の集まりのことです。「’シングルクォーテーション’」または、「”ダブルクォーテーション”」で文字を囲うことで、テキスト文字として表示させることができます。文字列のデータ型は、typeof演算子を使用するとstringを返します。

const greeting = 'Hello';
console.log(greeting);
console.log(typeof(greeting));

Javascript primitive

論理値(Boolean)

論理値は、true(真)またはfalse(偽)の値を取ります。if文やfor文など、JavaScriptのさまざまな場面で使われます。真理値は、trueもしくはfalseを返します。

const a = 3;
console.log(a < 5);
console.log(a === 0);

Javascript primitive

NullとUndefined

NullとUndefinedは、どちらも値が存在していないことを表します。
Nullは、変数にnullを代入して意図的に値がないことを示すときに使用できます。Undefinedは、値が代入される前の状態(値が代入されていない)です。それぞれnullまたはundefinedを返します。

let a = null;
console.log(a);

let b;
console.log(b);

Javascript primitive

シンボル(Symbol)

シンボルは、ES6から導入された比較的新しいデータ型で、唯一無二のユニークな値を持ちます。作成するたびにまったく新しいシンボルが生成されることが特徴的です。シンボルのデータ型は、typeof演算子を使用するとsymbolを返します。

let sym1 = Symbol('シンボル1です');
let sym2 = Symbol('シンボル2です');

console.log(typeof(sym1));
console.log(typeof(sym2));

Javascript primitive

ユニークな値を生成する例をみてみましょう。

let sym3 = Symbol();
let sym4 = Symbol();

console.log(sym3 === sym4);

Javascript primitive

「false」という結果を見てもわかるように、Symbol();の中身が同じであっても、必ず別の値が生成されるため、他の値と被っていないか気にする必要がありません。

現状、シンボルを使用したプログラムを見る機会は多くはありませんが、衝突を避けるためにオブジェクトのプロパティーのキーとして利用されることがあります。

まとめ

今回はJavaScriptのデータ型の一つである「プリミティブ型」について解説しました。プリミティブ型は、変数自体の中に値そのものを保持し、これ以上値を変更することのできない不変な値を持つことが特徴です。

プログラムを書くうえで、何かしらの検証を行うことがありますが、これらのデータ型の種類や性質を知ることで、返ってくる値がどのような意味を持っているのか認識できるようになります。ぜひ、理解を深めていきましょう。

Javascript関連記事