ラッパーオブジェクト
ビルトインオブジェクトとは
コード実行前にJSエンジンによって、自動的に生成されるオブジェクトのこと
=例えば自分で new ~などで自動的に生成しなくても使えるもの
ビルトインオブジェクトの一例
1.String
2.Object
3.Number
4.Function
5.Math
6.Boolean
7.Date
8.Symbol
などなど
*見分け方としてはWindowオブジェクトの大文字からはじまるコンストラクタなど
<重要>他の言語とは違って配列はオブジェクトの一種として扱われる
const array = new Array(1.2,3,4)
console.log(array)
console.log(array.length) //出力される
console.log(array.Array.length) //出力されない
なぜ、console.log(array.Array.length)はダメなのか?
// これのダメな理由が以下を生成した時点で
const array = new Array(1.2,3,4)
既に、プロパティ、メソッド、プロトタイプの生成は終わっているんだということ
Array.Array.length
という二重にオブジェクトを生成してしまっているのだ。
つまり、配列は作成した時点で、Arrayオブジェクトなるのだ
補足
ちなみにオブジェクトのメソッド自体(メソッド自体のソースコード)はC++で作られているらしい→中身は確認できない
Javascriptではプリミティブ型以外は全てオブジェクトである
ラッパーオブジェクト
ラッパーオブジェクトとは?
プリミティブ値を内包するオブジェクトである。
## どゆことなのか?
以前から伝えていたこと
プリミティブ型以外は、全てオブジェクトである!
といっていた
じゃあ、
文字列や数値は一切オブジェクトから生成させるプロパティやメソッドが使えないのか?
ということになる
そこで
ラッパーオブジェクトがプリミティブ型くんたちに言いました。
お前らだけでプロパティやメソッド使えないのはかわいそうだから
なんとかするよ。
と、プリミティブ型を包み込むようにオブジェクトっぽいことができるようになったのがラッパーオブジェクト
const a = 'hello' /* 文字列 */
const b = 100 /* 数値 */
console.log(a.toUpperCase());
console.log(b.toExponential());
まるでビルトインオブジェクトのように、簡単に使えます。
オブジェクト型じゃないのに、普通にメソッドが使えるのはビルトインオブジェクトのおかげです