Javascript ラッパーオブジェクト

JavaScriptの"型"というものは便利なようでややこしく…

var s = "Hello, My Name is Jack.";
var name = s.substring(s.lastIndexOf(" ")+1, s.length);


このようなコードを普段何気なく書いてましたが、よくよく考えるとsってstring型じゃ…?
なんでオブジェクトのメソッドやプロパティを呼び出すことができるのか?

調べてみると、JavaScriptでは基本データ型(数値、文字列、論理値)のラッパーとして、Number、String、Booleanというクラスが用意されているそうです。つまり、文字列のメソッドやプロパティにアクセスしようとすると、JavaScriptが内部的にStringラッパーオブジェクトを生成し、文字列の代わりにこのオブジェクトを使用します。もちろん他の型でも同様です。だから上のようなコードが実行できるわけですね。

ちなみに内部で生成されるオブジェクトは一時的なもので、メソッドやプロパティの呼び出しが終了すると、廃棄されてしまいます。なので、「どうしてもオブジェクトとして扱いたい!」という人は、

var s = new String("Hello, My Name is Jack.");


とするとOKです。要ははじめからオブジェクトとして宣言すればいいということです。