以前買って読んでなかった「パーフェクトJavaScript」(技術評論社)を読みはじめた。3章まで読んで、この本は評判通りのいい本だと実感した。
そもそもこの3章を読むまで文字列値とStringオブジェクトが違うということをわかっていなかった。
js> var sobj = new String('abc') js> typeof sobj "object" js> var s = String('abc') js> typeof s "string"
ただ、new Stringとコードに書かなければ、Stringオブジェクトを直接扱う必要はほぼないようなので(文字列値に対してメソッドを呼び出すような書き方をすると暗黙のうちにStringオブジェクトが生成されてそのメソッドが呼び出され、文字列を返すメソッドは文字列値を返してくるからだ)、この違い(というかStringオブジェクトの挙動)について詳しく知っておく必要はないと思われた。
しかしP.49に下記のような例があり
js> var s = new String('abc') js> print(s[1]); // インデックスの1文字 b
この説明に
返り値はStringオブジェクトです。
と書かれているほか、その次にはtoUpperCase()などに関する説明で、
先に示した表3.4で内容を書き換えるように見えるメソッドはすべて新しい文字列オブジェクトを生成して返します。
とあるが、どちらもjs-1.8.5で確認したところ文字列値が返ってくるようだった。
その他、イディオムとして数値aを文字列値に変換したいときは「a+''」と書けばいいとか、文字列
sを数値に変換したいときは単に「+s」だけでいいとか知らないことがいっぱいあった。