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 не является объектом.


Может пункт 21 все таки срабатывает в данном случае? Итоговый результат это не поменяет, так как toPrimitive не изменит NULL и не превратит его в число.


Получается цепочка багов в спецификации.