Javascript は String プリミティブと String オブジェクトを自動的に変換するので、String プリミティブである文字列上で String オブジェクトのあらゆるメソッドを呼ぶことができます。JavaScript は String プリミティブを一時的な String オブジェクトに自動的に変換してから、そのメソッドを呼び、そのあと、その一時的な String オブジェクトを捨てます。
String
String プリミティブと String オブジェクト。文字列がプリミティブってのが理解できずにいる。値そのものを表してメソッドが無いものがプリミティブと理解してた。数値や true、false、char が '値' ってのはイメージしやすいんだけど文字列はどうなってるんだろうか?
a = "abc" b = new String("abc") a == b //=> true a === b //=> false c = String("abc") a == c //=> true a === c //=> true
自動変換は理解。