1 > 2 > 1はfalse

1 < 2 < 3はtrueだけど, 3 > 2 > 1はfalse.

トンチですか?

いいえ, JavaScriptです.


優秀な奴はPython.

エラーを吐くのはHaskell.

嘘を付くのがJavaScript.


なんでJavaScriptでこんなことになるのか.

関係を表す演算子は左から評価されます.

3 > 2 > 1 → (3 > 2) > 1 → true > 1

両辺のToNumberが呼ばれます.

Booleanのインスタンスに対してToNumberが呼ばれたときは, true → 1, false → 0になる.

true > 1 → 1 > 1 → false

あ, falseになった.


同様に1 < 2 < 3も考えてみよう.

1 < 2 < 3 → (1 < 2) < 3 → true < 3 → 1 < 3 → true

(∩´∀`)∩ワーイ


同じ様な事は (==) でも作れる.

1 == 1 == 1 はtrueだけど, 2 == 2 == 2はfalse.


理由は考えてみてね.