【JavaScript】JavaScriptでは全てがオブジェクト?
JavaScriptでは全てがオブジェクトである
と捉えるべきなのです。
そうすると色々な疑問がスッキリします。
その理由について、今日はメモしていこうと思います。
JavaScriptにはプリミティブ型があります。
プリミティブ型:
オブジェクトではなく、値のみを持ち、プロパティやメソッドを持たないデータのこと。
文字列、数値、真偽値、null、undefined、symbol(ES6で追加)がそれに当てはまります。
というものです。
オブジェクトではなく、プロパティも持たないとはっきり言われているプリミティブ型ですが、以下のコードをみてみると
コンソールログで2と出力されました。
プリミティブ型なのにどうしてStringオブジェクトがもつlengthプロパティを使えているのかという疑問が出て来ます。
これがJavaScriptでは全てがオブジェクトであると捉えるべきという理由です。
実は暗黙的な型変換でオブジェクト型に変換されています。
では、なぜこのような動作を起こしたかというと、はっきりと言える意図があるわけではなさそうで
JavaScriptのクセのようなものみたいです。
注意ですが、暗黙的な型変換でエラーも吐かずプロパティを使えたので、これで良いのですが、明示的に行なっていないため後々問題が起こるかもしれません。
厳格にはやはりプリミティブ型は存在するので、JavaScript勉強中っていう自分レベルの人はJavaScriptでは全てがオブジェクトであるという考え方でとりあえずいいのかなと思いました。
正確にはJavaScriptでは全てがオブジェクトになり得るなのかな。