JavaScript/ラッパーオブジェクト型
ラッパーオブジェクト型
編集ラッパーオブジェクト型 (Wrapper Object Type) は、JavaScriptにおいてプリミティブ型
の値をオブジェクトのように操作するための特別なオブジェクト型
です。プリミティブ型の値(String
、Number
、Boolean
、Symbol
、BigInt
)は通常オブジェクトではありませんが、一時的にラッパーオブジェクトに変換されることで、オブジェクトとしての操作が可能になります。
ラッパーオブジェクト型の特徴
編集プリミティブ型
の値を一時的にオブジェクトとして扱えるようにする。String
、Number
、Boolean
などのコンストラクターによって生成される。- 一時的に生成されるラッパーオブジェクトはガベージコレクションの対象となる。
主なラッパーオブジェクト型
編集以下は主要なラッパーオブジェクト型とその特徴です。
- String
- プリミティブ型の文字列値をラップし、文字列操作のメソッドを提供します。
const str = "hello"; console.log(str.toUpperCase()); // "HELLO"
- Number
- プリミティブ型の数値をラップし、数値操作のメソッドや定数を提供します。
const num = 42; console.log(num.toFixed(2)); // "42.00"
- Boolean
- 真偽値をラップし、オブジェクトとして操作できるようにします。
const bool = true; console.log(bool.valueOf()); // true
- Symbol
- シンボル値をラップするための型ですが、通常ラップする必要はありません。
const sym = Symbol("id"); console.log(sym.description); // "id"
- BigInt
- 大きな整数を扱うプリミティブ型をラップします。
const bigInt = 123456789012345678901234567890n; console.log(bigInt.toString()); // "123456789012345678901234567890"
自動ボクシング
編集JavaScriptでは、プリミティブ型の値がオブジェクトとして扱われる際に、自動的にラッパーオブジェクトが生成されます。この機能を「自動ボクシング
(Auto-Boxing)」と呼びます。
const str = "hello"; // プリミティブ型であるが、一時的に String オブジェクトに変換される console.log(str.toUpperCase()); // "HELLO"
自動ボクシングは、一時的な変換であり、以下のようにラッパーオブジェクトを明示的に生成する場合とは異なります。
// 明示的なラッパーオブジェクトの生成 const explicitString = new String("hello"); console.log(typeof explicitString); // "object"
使用上の注意点
編集- パフォーマンスの影響:
- 自動ボクシングにより一時的にオブジェクトが生成されるため、頻繁な操作ではパフォーマンスに影響を与える場合があります。
- 型の違いに注意:
- ラッパーオブジェクト型とプリミティブ型は異なる型として扱われるため、
===
演算子の比較で問題が生じることがあります。 const str1 = "hello"; const str2 = new String("hello"); console.log(str1 === str2); // false
- ラッパーオブジェクト型とプリミティブ型は異なる型として扱われるため、
- 非推奨な使用:
- ラッパーオブジェクトを明示的に生成することは非推奨とされており、必要な場合を除き避けるべきです。
まとめ
編集- ラッパーオブジェクト型は、プリミティブ型の値をオブジェクトとして操作するための一時的な仕組みです。
- 自動ボクシングによって多くの場合明示的にラップする必要はありません。
- パフォーマンスや型の違いに注意しつつ使用することが推奨されます。