Почему не отсеиваются нули при сравнении 0 < 0?

При сравнении двух чисел в JavaScript с помощью оператора <, значения нуля обрабатываются особым образом, что может приводить к некоторому недоумению и путанице.

Когда мы сравниваем ноль с нулем (0 < 0), мы ожидаем, что условие будет ложным, так как ноль не может быть меньше нуля. Однако, JavaScript обрабатывает эту ситуацию по-другому.

Когда мы используем операторы сравнения (<, >, <=, >=), JavaScript выполняет приведение типов перед выполнением сравнения. В случае сравнения числа с нулем, JavaScript приводит числа к числовому типу данных и сравнивает их значения. Но какое значение имеет сам ноль?

В JavaScript ноль имеет особое значение, он считается "falsy" (ложным) значением. Все "falsy" значения рассматриваются как они были бы равны нулю, но не сами по себе равны нулю. Кроме нуля, к "falsy" значениям относятся также undefined, null, NaN, false и пустая строка ("").

Когда мы сравниваем два нуля с помощью оператора <, JavaScript обрабатывает их как оба "falsy" значения и поэтому они считаются равными. Таким образом, 0 < 0 возвращает ложное значение (false).

В то же время, когда мы сравниваем положительное число с нулем (x < 0, где x - положительное число), оператор < выполняет нормальное числовое сравнение и возвращает правильный результат. Также это относится и к отрицательным числам (x < 0, где x - отрицательное число).

Выводящаяся на экран характеристика null как ложной является простым результатом, потому что логическое значение false просто обозначает результат, противоположный true.