プリミティブ型とオブジェクト型について
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