JavaScriptにおけるラッパーオブジェクト
この記事ではJavaScriptにおけるラッパーオブジェクトについて説明します。
YouTube Video
ラッパーオブジェクト
JavaScriptには、プリミティブ型とそれを扱うためのオブジェクト(ラッパーオブジェクト)があります。
プリミティブ型
プリミティブ型は単一の値を表すデータ型で、シンプルで軽量です。これらはイミュータブル(変更不可)で、直接オブジェクトのメソッドやプロパティを持ちませんが、一時的にラッパーオブジェクトに変換されることで操作が可能です。
stringやnumberなどはプリミティブ型です。一方、ラッパーオブジェクトはStringやNumberのように最初が大文字になります。
ラッパーオブジェクト
プリミティブ型を操作するために、JavaScriptは一時的にラッパーオブジェクト(Objectラッパー)を生成します。ラッパーオブジェクトには、プリミティブ型に対するメソッドやプロパティが含まれています。
Number
1let numObject = new Number(42); // Wrapper object
2
3console.log(typeof numObject); // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42); // Return primitive value
7
8console.log(typeof numValue); // number
9console.log(numValue); // 42
Numberはプリミティブなnumberをラップするオブジェクト型です。Numberオブジェクトを明示的に作成することで、numberのように数値を扱えますが、通常はプリミティブなnumber型を使うことが推奨されます。
typeof numObjectは"object"ですが、typeof 42は"number"です。
new演算子をつけて新たにラッパーオブジェクトを生成した場合と、Numberを関数として呼び出した場合で結果が異なることにも注意してください。関数として呼び出した場合には、プリミティブ型のnumberが返されます。
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- プリミティブな
stringをラップするオブジェクト型です。Stringオブジェクトを使うことで文字列のプロパティやメソッドにアクセスできますが、通常はプリミティブなstringを使用します。
typeof strObjectは"object"ですが、typeof "Hello"は"string"です。
Numberと同様に、Stringを関数として呼び出した場合にはプリミティブ型のstringが返されます。
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- プリミティブな
booleanをラップするオブジェクト型です。Booleanオブジェクトを明示的に作成することもできますが、通常はプリミティブなboolean型を使用します。
typeof boolObjectは"object"ですが、typeof trueは"boolean"です。
Numberと同様に、Booleanを関数として呼び出した場合にはプリミティブ型のbooleanが返されます。
BigInt
1let bigIntObject = Object(9007199254740991n); // Wrapper object
2
3console.log(typeof bigIntObject); // object
4console.log(bigIntObject.valueOf()); // 9007199254740991n
5
6let bigIntValue = BigInt(9007199254740991); // Return primitive BigInt
7
8console.log(typeof bigIntValue); // bigint
9console.log(bigIntValue); // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。
typeof bigIntObjectは"object"であるのに対し、typeof 9007199254740991nは"bigint"です。
BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。
Symbol
1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject); // object
4console.log(symObject.valueOf()); //
Objectを使ってSymbolのラッパーオブジェクトを生成できますが、通常はSymbolプリミティブ型をそのまま使用します。
プリミティブ型とラッパーオブジェクトの違い
- プリミティブ型は軽量で、メモリ効率が良い一方、直接プロパティやメソッドは持ちません。しかし、JavaScriptはプリミティブ型を使っても、必要なときに自動的に一時的なラッパーオブジェクトを生成してメソッドやプロパティを提供します。
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- ラッパーオブジェクトは明示的に生成されたオブジェクトであり、メモリやパフォーマンスに影響を与えるため、通常はプリミティブ型を使うことが推奨されます。
まとめ
- プリミティブ型:
number、string、boolean、null、undefined、symbolなど、軽量で直接のメソッドを持ちません。 - ラッパーオブジェクト:
Number、String、Booleanなど、プリミティブ型に一時的に変換されるオブジェクトです。
YouTubeチャンネルでは、Visual Studio Codeを用いて上記の記事を見ながら確認できます。 ぜひYouTubeチャンネルもご覧ください。