JavaScriptのプリミティブ型からメソッドが呼べる(ように見えてしまう)件

前提

JavaScriptの型は、オブジェクト型とプリミティブ型の2つだけ

 

プリミティブはオブジェクトじゃない、つまりインスタンスメソッドを持たないデータだってこと。

 

プリミティブ型一覧

Boolean

Number (小数もここに入る。Float的なものはない。NaN:Not A Numberもここ。)

(BigInt)

String

(Symbol)

Null

Undefined

 

------------------------

しかし以下みたいに、プリミティブ型からメソッド呼べるように見える

'My name is taro'.replace('taro', 'hanako')

 

これはJavaScriptの特殊仕様によるもの。

(nullとundefinedを除く)プリミティブ型には、その値を包含するラッパーオブジェクトが存在する。

そして、プリミティブ型にアクセスするとき、それに対応するラッパーオブジェクトに自動変換する、という仕様がある。

上の例だと、そのラッパーオブジェクトStringのインスタンスメソッドを実行していた。