JavaScript の数値はある一瞬だけオブジェクトになるというので追試してみた。仕様書にはインスタンスを一時的に作ってすぐに破棄すると書いてあるが…
String.prototype.self = function(){ return this; } var s1 = new String("a"); alert(s1.self() === s1.self()); // true var s2 = "a"; alert(s2.self() === s2.self()); // false
確かに毎回新しいオブジェクトが生成されているようだ。生成オブジェクトをキャッシュして、同一オブジェクトを返すと思ったが違っていた。おそらく実行効率よりメモリを優先しているのだろう。
JavaScriptでは文字列オブジェクトではなく文字列リテラルの使用を推奨している。実行速度を考えると、このリテラル処理の実装は気になるが、JavaScriptではprototypeに委譲先のオブジェクトへの参照をセットするだけなので、インスタンス生成はそんなに重い処理ではないのかもしれない。知らんけど。