あらゆるものがObjectのように振る舞う
JavaScriptを学び始め
『あらゆるものがObjectのように振る舞う』
ということは本などで目にしていたがあまりピンと来なかった。
これを初心者の僕が納得できる本を見つけた。
認識を深めることができた本
『開眼!JavaScript』の15ページのNOTEに書かれていた。
#『あらゆる...』とはどういうことか
このような文字列をリテラルで記述するとオブジェクトではなく、プリミティブ型としての性質を持ちます。
つまり、foo
はオブジェクトではなくプリミティブなのでオブジェクトのメソッドやプロパティにはアクセスすることができないはずです。
プリミティブであるfoo
がStringオブジェクトのメソッドを利用できています。
これは、JavaScriptがプロパティにアクセスしようとするとプリミティブ値を補完するラッパーオブジェクトを一時的に生成するのです。(foo.length
)
これによりラッパーオブジェクトによりStringオブジェクトのメソッドやプロパティを利用できます。目的のメソッドが実行されるとプリミティブ値に戻ります。
つまり、
『JavaScriptはObjectばっかりだ』
というよりも
『JavaScriptはすべてがObjectのようにふるまう』
が正しい。
結論
裏でプリミティブ⇄オブジェクトのような変換を行うことで、全てがObjectのように振る舞えるようにやっているんだ、と認識を改めることができた。