Help us understand the problem. What is going on with this article?

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

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
makotoo2
大津真。テクニカルライター
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away