JavaScript入門 ラッパーオブジェクトの解説
ラッパーオブジェクトとは、プリミティブ値を包み込むオブジェクトのことです。文字列などのプリミティブ値は、単なる値のため、オブジェクトのようにメソッドなどは保持していません。しかし、JavaScriptでは、次のようにプリミティブ値に続けてメソッドを記述できます。
文字列に続けてメソッドやプロパティが記述できる
console.log( "hello".toUpperCase() );
>HELLO
console.log( "hello".length );
>5
これは、プリミティブ値に続けてメソッドやプロパティが記述された場合には、そのプリミティブ値に対応するラッパーオブジェクトのメソッドやプロパティが暗黙的に呼び出されるという仕様になっているためです。そのため、上記のコードのようにプリミティブ値であっても、オブジェクトのようにメソッドやプロパティにアクセスできます。
“hello”のような文字列の場合のラッパーオブジェクトは、Stringオブジェクトです。そのため、”hello”に続けてStringオブジェクトのメソッドやプロパティを使うことができます。なお、文字列を最初からStringオブジェクトとして宣言することもできます。
文字列をオブジェクトとして宣言して使用
const str = new String( "hello" );
console.log( str.toUpperCase() );
>HELLO
しかし、このようにオブジェクトとして文字列を宣言しなくても、ラッパーオブジェクトを通してStringオブジェクトのメソッドやプロパティにアクセス可能なため、一般的にこのような書き方はしません。また、プリミティブ型として宣言した値はあくまでプリミティブ値なので、変数に代入したとしてもプリミティブ値のままであり、オブジェクトに変換されるわけではありません。メソッドやプロパティにアクセスする必要があるときのみ、ラッパーオブジェクトを通してメソッドやプロパティにアクセスしています。
プリミティブ値はあくまでプリミティブ値
const str = "hello";
console.log( str instanceof String );
>false //strはStringコンストラクタのオブジェクトではない
str.toUpperCase();
console.log( str instanceof String )
>false //メソッドを呼び出しても恒久的にオブジェクトに変換されるわけではない
また、ラッパーオブジェクトには、文字列に対応するString以外にも、数値に対応するNumberオブジェクトや真偽値に対応するBooleanオブジェクトなどがあります。
プリミティブ値 | 対応するラッパーオブジェクト |
---|---|
“文字列” | String |
12 | Number |
12n | BigInt |
true / false | Boolean |
シンボル値 | Symbol |