JavaScriptがキモいという話
>RHG読書会はけっきょく行かなかったんですが(ヒマになったので行けたんだけどね)、そのあと各方面からいろいろ聞いたはなしを総合して、手元のspidermonkey とかで遊んでみた。のだが、なるほどこれはすごい。
>
>js> "1"+1
11
js> +"1"+1
2
js> "1"-1
0 > >うーん。ようするに、+演算子は数値の加算にも文字列の結合にも用いられるのと、 awk/perl 流の文字列から数値への暗黙の型変換が組み合わさった結果として、なんだかおかしなことになるぞと。ふむふむ。 > >ところで、 > >js> +"1"+1+""
2
js> +"1"+(1+"")
11 > >というのは結合法則を満たしていないように見えるのでたいへん気持ち悪いんですが。 > >perl でも似たような罠があるように見えるかもしれないけれど、 perl では文字列の結合には . 演算子を使うから、こういう問題はおきない。やっかいなのはあくまでも、「文字列加算も+で」「文字列も暗黙に数値に」という2つの組み合わせの妙にあるからね。 >
11
js> +"1"+1
2
js> "1"-1
0 > >うーん。ようするに、+演算子は数値の加算にも文字列の結合にも用いられるのと、 awk/perl 流の文字列から数値への暗黙の型変換が組み合わさった結果として、なんだかおかしなことになるぞと。ふむふむ。 > >ところで、 > >js> +"1"+1+""
2
js> +"1"+(1+"")
11 > >というのは結合法則を満たしていないように見えるのでたいへん気持ち悪いんですが。 > >perl でも似たような罠があるように見えるかもしれないけれど、 perl では文字列の結合には . 演算子を使うから、こういう問題はおきない。やっかいなのはあくまでも、「文字列加算も+で」「文字列も暗黙に数値に」という2つの組み合わせの妙にあるからね。 >