JavaScriptのプリミティブ型とオブジェクト
JavaScriptのプリミティブ型とオブジェクト:
JavaScriptには7つのデータ型が定義されており、それらはプリミティブ型とオブジェクトのデータ型に分けることができます。
プリミティブ型とオブジェクトに該当するデータは以下のとおり。ちなみにプリミティブ型とは、他の型を組み合わせて構成されていないシンプルな型のことです。
プリミティブ型とオブジェクトで分けられるという話をしましたが、実はプリミティブ型はオブジェクトから生成される型です。
どういうことなのかというと、実際にコードを書いてみてみるのが早いです。
プリミティブ型を生成する書き方は、リテラルと呼ばれる記述になります。整数や文字列はリテラルによる生成以外にも、String()やNumber()というネイティブオブジェクトからでも生成することができます。
オブジェクトからでも、リテラルからでも、生成した値は同じ
次に、それぞれの値のコンストラクタを確認してみることにします。
同じコンストラクタで生成されていることが確認できました。
コンストラクタを直接読んだ場合はオブジェクトが返されますが、文字列や数値をリテラルで記述すると裏でコンストラクタが実行され、プリミティブ型が返されるのです。
だから、プリミティブ型の値に対してオブジェクトのプロパティが実行できるのですね。
このように裏で実行されているコンストラクタは同じですが、生成されるデータはプリミティブ型とオブジェクトとそれぞれ型が異なります。そのため、同値演算子(
JavaScriptには7つのデータ型が定義されており、それらはプリミティブ型とオブジェクトのデータ型に分けることができます。
プリミティブ型とオブジェクト
プリミティブ型とオブジェクトに該当するデータは以下のとおり。ちなみにプリミティブ型とは、他の型を組み合わせて構成されていないシンプルな型のことです。
プリミティブ型
- Boolean
- null
- undefined
- Number
- String
- Symbol
var myBoolean = true; var myNull = null; var myString = 'hoge'; var myNumber = 1;
オブジェクト
var myObject = { 'myBoolean': true, 'myNull': null, 'myString': 'hoge', 'myNumber': 1 };
プリミティブ型はネイティブオブジェクトから生成される
プリミティブ型とオブジェクトで分けられるという話をしましたが、実はプリミティブ型はオブジェクトから生成される型です。どういうことなのかというと、実際にコードを書いてみてみるのが早いです。
プリミティブ型を生成する書き方は、リテラルと呼ばれる記述になります。整数や文字列はリテラルによる生成以外にも、String()やNumber()というネイティブオブジェクトからでも生成することができます。
var myString1 = new String('hoge'); // ネイティブオブジェクトによる生成 var myString2 = 'hoge'; // リテラルによる生成 console.log(myString1, myString2); // hoge hoge
hoge
という文字列を生成していることがわかります。次に、それぞれの値のコンストラクタを確認してみることにします。
var myString1 = new String('hoge'); var myString2 = 'hoge'; console.log(myString1.constructor, myString2.constructor); // [Function: String] [Function: String]
コンストラクタを直接読んだ場合はオブジェクトが返されますが、文字列や数値をリテラルで記述すると裏でコンストラクタが実行され、プリミティブ型が返されるのです。
だから、プリミティブ型の値に対してオブジェクトのプロパティが実行できるのですね。
var hogeLength = 'hoge'.length;
プリミティブ型とオブジェクトの値の比較
このように裏で実行されているコンストラクタは同じですが、生成されるデータはプリミティブ型とオブジェクトとそれぞれ型が異なります。そのため、同値演算子(===
)で比較をすると、プリミティブ型の値での比較とオブジェクトでの比較となり、結果は偽となります。var myString1 = new String('hoge'); var myString2 = 'hoge'; console.log(myString1 === myString2); // false
コメント
コメントを投稿