22
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】ラッパーオブジェクトについて

Posted at

※当方駆け出しエンジニアのため、間違っていることも多々あると思いますので、ご了承ください。また、間違いに気付いた方はご一報いただけると幸いです。

#JavaScript におけるデータは「すべてオブジェクトである」

と、いうふうに聞いたことがある。

しかし、学習を進める上で

**「データ型のうちObjectはオブジェクト型、それ以外をプリミティブ型という。」**とのことで、矛盾していないか?との思いがよぎった。

詳しくはこちら
【JavaScript】JavaScriptにおける変数の参照について

その答えが、**「ラッパーオブジェクト」**であった。

例えば、以下のような式があるとする。

let str = "name";
let big = str.toUpperCase();

console.log(big);

//NAME

toUpperCase()関数は、呼び出し元の文字列を大文字にして返却する関数であるが、なぜプリミティブ型のであるstring型のstrが関数を呼べるのか。
実際、下記の様にデータ型を調べてみると、

console.log(typeof str);
//string

string型である。

この理由はJavaScriptの**「ラッパーオブジェクトの自動変換」**という機能にある。

ラッパーオブジェクトというのは、本来オブジェクト型でない値を、オブジェクトで包んで(ラップして)オブジェクトとしての振る舞いを持たせるというものである。

つまり、

str.toUpperCase();

この様に、string型のデーターに対し、オブジェクトとしての振る舞いを要求された時は、ラッパーオブジェクトで自動的に包んで、実行されるのである。

str.toUpperCase();

この時

(new String(str)).toUpperCase();

この様に自動的に、string型に対応するオブジェクトであるStringからインスタンスが作成され、関数を呼び出している。(Stringオブジェクトは、toUpperCaseメソッドを保有している。)

実際、開発者はこの自動変換を意識せずともコードは書くことができるので、string型もオブジエクとして扱うことができる。

つまり
###JavaScript におけるデータは「すべてオブジェクトである」のではなく、ラッパーオブジェクトのおかげで、「全てのデーターはオブジェクトのように振舞うことができる」と言うことなんですね。

22
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?