Супер-полезная фича, которую я видел только в Эрленге — тотальный порядок на всех значениях, даже разных типов. Можно спокойно сравнивать числа и строки, словари и були, атомы и функции. Физического смысла это не несет, и не очень важно, больше ли true чем 'a' или меньше. Важно, что это как-то решено и глобально согласовано для всех значений.
Удобно это, в основном, чтобы значения разных типов хранить в сортированном контейнере и делать бинарный поиск, например. Да, странно, нечасто нужно, но иногда удобно — а почему бы и нет?
В остальных языках разные типы обычно вообще несравнимы, а одинаковые просто нарушают контракт линейного порядка.
NaN < 1 || NaN > 1 || NaN === 1
=> false, NaN != NaN — честно, конечно, теоретически чисто, но непрактично. Ну вот кому хорошо от того, что попавший в сет NaN ломает тебе все инварианты? Или отдельная история про то, что
==`/`===
работает отдельно от
<`/`>
, что только путает карты:
a = function() { return 1; }
b = function() { return 1; }
a > b => false
a < b => false
a <= b => true
a >= b => true
a == b => false
Будь как Эрленг, короче. Сравнивай яблоки с огурцами.