JavaScript/ラッパーオブジェクト型

ラッパーオブジェクト型

編集

ラッパーオブジェクト型 (Wrapper Object Type) は、JavaScriptにおいてプリミティブ型の値をオブジェクトのように操作するための特別なオブジェクト型です。プリミティブ型の値(StringNumberBooleanSymbolBigInt)は通常オブジェクトではありませんが、一時的にラッパーオブジェクトに変換されることで、オブジェクトとしての操作が可能になります。

ラッパーオブジェクト型の特徴

編集
  • プリミティブ型の値を一時的にオブジェクトとして扱えるようにする。
  • StringNumberBoolean などのコンストラクターによって生成される。
  • 一時的に生成されるラッパーオブジェクトはガベージコレクションの対象となる。

主なラッパーオブジェクト型

編集

以下は主要なラッパーオブジェクト型とその特徴です。

  1. String
    プリミティブ型の文字列値をラップし、文字列操作のメソッドを提供します。
    const str = "hello";
    console.log(str.toUpperCase()); // "HELLO"
    
  2. Number
    プリミティブ型の数値をラップし、数値操作のメソッドや定数を提供します。
    const num = 42;
    console.log(num.toFixed(2)); // "42.00"
    
  3. Boolean
    真偽値をラップし、オブジェクトとして操作できるようにします。
    const bool = true;
    console.log(bool.valueOf()); // true
    
  4. Symbol
    シンボル値をラップするための型ですが、通常ラップする必要はありません。
    const sym = Symbol("id");
    console.log(sym.description); // "id"
    
  5. 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"

使用上の注意点

編集
  1. パフォーマンスの影響:
    自動ボクシングにより一時的にオブジェクトが生成されるため、頻繁な操作ではパフォーマンスに影響を与える場合があります。
  2. 型の違いに注意:
    ラッパーオブジェクト型とプリミティブ型は異なる型として扱われるため、=== 演算子の比較で問題が生じることがあります。
    const str1 = "hello";
    const str2 = new String("hello");
    console.log(str1 === str2); // false
    
  3. 非推奨な使用:
    ラッパーオブジェクトを明示的に生成することは非推奨とされており、必要な場合を除き避けるべきです。

まとめ

編集
  • ラッパーオブジェクト型は、プリミティブ型の値をオブジェクトとして操作するための一時的な仕組みです。
  • 自動ボクシングによって多くの場合明示的にラップする必要はありません。
  • パフォーマンスや型の違いに注意しつつ使用することが推奨されます。