プログラム言語の奇妙な特徴


stackoverflowにちょっと面白いquestionがあったので眺めてました。
プログラミング言語の奇妙な特徴を教えてね、というもの。

strangest-language-feature
http://stackoverflow.com/questions/1995113/strangest-language-feature


見た感じjavascriptについての回答にvote数が多いようですね。
さすがjs。


==の挙動がおかしいだろってのとか

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
false     ==   undefined     // false
false     ==   null          // false
null      ==   undefined     // true
" \t\r\n" ==   0             // true


+の挙動がおかしいだろってのとか

 '5' + 3  // '53'
 '5' - 3  //  2


この辺はJavaScript The Good Partsでも悪いパーツ/ひどいパーツとして紹介されてますね。

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス


あとjavaのこれも個人的に面白かったです。

Integer foo = 1000;
Integer bar = 1000;

foo <= bar; // true
foo >= bar; // true
foo == bar; // false

//However, if the values of foo and bar are between 127 and -128 (inclusive)
//the behaviour changes:

Integer foo = 42;
Integer bar = 42;

foo <= bar; // true
foo >= bar; // true
foo == bar; // true


なぜこうなるかはInteger#valueOfのコードを読むとわかります。
上記のページで紹介されてますので、興味のある方はどうぞ