JavaScript. NULL и 0
Сравниваем NULL(значение не присвоено) и 0(число).
null > 0; // false (нуль больше нуля? Нет.)
null == 0; // false (нуль равен нулю? Нет.)
null >= 0; // true (нуль больше или равен нулю? Да.)
Феномен тут в части null == 0.
При нестрогом равенстве NULL должен приводиться к числу. +null == 0, то есть при приведении к числу null == 0;
На хабре в материале рассматривающем этот вопрос https://habr.com/ru/company/ruvds/blog/337732/ приводилась вырезка из спецификации:
"Сравнение x == y, где x и y являются значениями, возвращает true или false. Такое сравнение производится следующим образом:
1. Если Тип(x) отличается от Типа(y) - переход на шаг 14.
...
14-20 не подходят.
...
21. Если Тип(x) - Object, а Тип(y) - String или Number, вернуть результат сравнения ToPrimitive(x)== y.
22. Вернуть false"
И далее автор материала делает вывод, что так как null это null (тип его null), то мы просто утыкаемся в отсутствие заданных условий для этой ситуации и переходим к пункту 22 с автоматическим возвратом false.
Далее нюанс. typeof(null) вернет object. Что, внезапно, является старым багом. Так как null не является объектом.
Получается цепочка багов в спецификации.