Что будет на выходе?
Ответ: false, false, false, true
Пояснение:
Операторы сравнения > и < после приведения непримитивных операндов к примитиву, применяют метод toNumber на обеих частях выражения (исключение: оба операнда типа string).
Так, null преобразуется к +0, а 0 остается 0.
+0 и 0 имеют одинаковые числовые значения, поэтому результат false.
[про signed zeros в JS можно почитать тут (https://medium.com/coding-at-dawn/is-negative-zero-0-a-number-in-javascript-c62739f80114)]
В ECMA описан алгоритм сравнения для равенств (https://javascript.ru/ecma/part11#a-11.9.3). В зависимости от типа операндов, алгоритм ведет себя по разному. В нем описаны, например, такие кейсы:
- когда оба операнда одного типа
- когда один из операндов null, а другой undefined
- один string, другой number
и некоторые другие.
Но кейс, в котором один из операндов null, а другой number/string в алгоритме не прописан.
Не попав ни в одно из условий, алгоритм вернет false по дефолту.
***
Алгоритм сравнения для >= и <= работает от обратного. (Если a НЕ меньше b, то оно точно больше или равно b.)
Т.к null < 0 возвращает значение false, то null >= 0 - это true.
По этой логике null <= 0 тоже true.