Edited at

プリミティブ型とオブジェクト型

More than 3 years have passed since last update.


プリミティブ型とオブジェクト型について

JavaScriptのデータ型(Type)は、プリミティブ型とオブジェクト型に大別されます。


データ

プリミティブ型
数値・文字列・論理値・null・undefined

オブジェクト型
その他オブジェクト

さて、オブジェクトとはプロパティ(値)とメソッド(操作)の集まりです。それに対してプリミティブ型とはプロパティとメソッドを持たない単純なデータです。たとえば数値は「1」「3.14」といった数、文字列は「’Hello’」や「’こんにちは’」といった一連の文字、論理値は「true(真)」「false(偽)」のどちらかの値です。

var num = 3; // 数値型

var str = "Hello"; // 文字列型
var isOK = true; // 論理値型


ラッパーオブジェクト

なお、数値、文字列、論理値といったプリミティブ型をオブジェクトとして扱うデータ型が用意されています。それれらの型をラッパーオブジェクトと呼びます。

Number

String

Boolean

これらのオブジェクトを明示的に生成するにはコンストラクタを使用します。コンストラクタの名前はオブジェクト名と同じです。

var strObj = new String("Hello"); // Stringオブジェクトを生成

var numObj = new Number(3); // Numberオブジェクトを生成
var isOKObj = new Boolean(true); //Booleanオブジェクトを生成


ラッパーオブジェクトへの変換は自動で行われる

プリミティブ型はプロパティとメソッドを持たないと説明しましたが、実際には次のようにプリミティブ型のプロパティとメソッドにアクセスできます。

var str = "Hello";

len = str.length; // lenghtプロパティ
c = str.charAt(0) // charAt()メソッド

実は、プリミティブ型に対して対応するラッパーオブジェクトのプロパティやメソッドにアクセスすると、一時的にラッパーオブジェクトに変換されるのです。


プリミティブ型とラッパーオブジェクトの値の比較

プリミティブ型と値、それに対応するラッパーオブジェクトの型の値を比較する場合に、「==」を使用すると値の比較となります。たとえば文字列型とString型の比較では、文字列が同じ場合にはtrueとなります。

var str = "Hello";

var strObj = new String("Hello");
isSame = (str == strObj); // true

それに対して「===」演算子を使用した場合、厳密な比較となり、文字列が同じであったもfalseとなります。

isSame = (str === strObj); // false