HTML5 プロフェッショナルッショナル認定試験の勉強をしていた際に「ラッパーオブジェクト」というワードが出てきました。
ワード自体は耳にしたことがありましたが、
実際にどのようなものなのか説明できるほどの知識がありませんでした。
そこで今回はこのラッパーオブジェクトについて調べてみました。
ラッパーオブジェクトとは
まずは下記の例を見てください。
// プリミティブ型の文字列
const str = "hello";
// 文字列に対してメソッドを呼び出す
console.log(str.toUpperCase()); // HELLO
プリミティブ型の値である文字列であるにも関わらず、
String
オブジェクトのインスタンスメソッドである toUpperCase()
メソッドを呼び出すことができます。
JavaScriptでは、プリミティブ型に対してプロパティアクセスをすると、
自動的に対応するラッパーオブジェクトに変換されます。
実際には下記のように動作しています。
const temp = new String("hello"); // 一時的なラッパーオブジェクト
const result = temp.toUpperCase(); // ラッパーオブジェクトのメソッド使用
temp = null; // 一時オブジェクトは破棄
※追記
追記 (2024/12/08)
こちらに記載があるように、
BigInt()
や Symbol()
コンストラクターは new
を使用するとエラーが発生します。
これらのラッパーオブジェクトを作成するには、
下記のように Object()
を使用するようです。
const symbolObj = Object(Symbol("hoge"));
console.log(typeof symbolObj); // "object"
BigInt
や Symbol
以外にも使用できるのでラッパーオブジェクトを作成する場合は、Object()
を使用するほうが一貫性があります。
つまりラッパーオブジェクトとは、
プリミティブ型である値をオブジェクトとして扱えるようにするため、
自動的に生成されるオブジェクトのことのようです。
ラッパーオブジェクトの種類
ラッパーオブジェクトは、プリミティブ型のうち
undefined
と null
を除くすべてに用意されています。
プリミティブ型 | ラッパーオブジェクト |
---|---|
数値 | Number |
長整数 | BigInt |
文字列 | String |
論理値 | Boolean |
シンボル | Symbol |
まとめ
ラッパーオブジェクトについて詳しく知ることができました。
プリミティブ型の値にメソッドやプロパティを提供する便利な仕組みです。
ただし、プリミティブ型とラッパーオブジェクトの共同の違いがバグの原因になる可能性があるため、new String()
や new Number()
を使うのは一般的に推奨されていないようです。
きちんと理解し、正しく使っていきたいですね。
それでは。
参考文献