- 2008-12-23 (Tue) 11:17
- JavaScript
いつだったか、この blog にも何度か登場している Mauvis に勧められて購入した “JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス” は原書で何度か読みました。なんだか翻訳が最近出たそうなのですが(訳の問題はわかりませんが)、これはお勧めです。すごく薄いけど、気付かされることがすくなくとも、僕には沢山ありました。しばらくこの本から学んだことをいくつか紹介していきたいと思います。
最初は String の比較です。
以下の expression は共に true と評価されます。
('cat' == 'c' + 'a' + 't') // true
('cat' === 'c' + 'a' + 't') // true
この本を読むまでは、JavaScript はなんとなくインスタンスベースの比較をしてるのかなぁと思ってました。それはつまり、等号( == あるいは === )の左右両辺にが全く同じメモリアドレスを指し示している時だけ、true と評価される、ということです。しかし実際には、String の比較時はその文字列の内容を評価していました。
var s1 = s2 = 'foo'; var s3 = 'foo'; s1 == s2; // true s1 == s3; // still true, of course.
従って、もし万が一、インスタンスで文字列を比較したい場合は、以下のようにするといいでしょう。
var s4 = new String('foo');
var s5 = new String('foo');
s4 == s5 //false
しかし本の中になんども登場する通り(そして僕も強く同意しますが)、Wrapper Object (String, Number そして Boolean) は混乱の元です。必要となるシチュエーションもあまり想像できません。
ところでインスタンスベースの文字列比較、というのはもうあまりポピュラーではないんでしょうか?僕が多分最初に Java を学んだときはインスタンスベースの比較だったような気がしたのですが、今試してみたら (1.5.0_16 on Intel Mac) 内容で比較していますね。PHP も同じようです。
- Newer: Falsy values – “JavaScript: The Good Parts”
- Older: String comparison – “JavaScript: The Good Parts”
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.nydd.org/2008/12/%e6%96%87%e5%ad%97%e5%88%97%e6%af%94%e8%bc%83-javascript-the-good-parts/trackback/
- Listed below are links to weblogs that reference
- 文字列比較 – JavaScript: The Good Parts from Vantage Point of Queens