Почему в JavaScript выражение (0 < 5 < 3) возвращает true?

Всё очень просто. Надо смотреть на эти выражения глазами JavaScript, а не учителя математики младшых классов.

В JavaScript действует приоритет операций, и (0 < 5 < 3) будет восприниматься как ((0 < 5) < 3). Это выражение в свою очередь вычисляется как (true < 3), и поскольку true при сравнении с числом оборачивается в 1, то получим (1 < 3), то есть true (истина).

По тем же причинам (0 < 5 < 1) возвращает false, ведь (0 < 5) возвращает true, которое в данном случае воспринимается как 1, и в результате (1 < 1) равно false (ложь).
[/answer]