Мне пришлось написать процедуру, которая увеличивает значение переменной на 1, если ее тип равен number и присваивает 0 переменной, если нет, где исходная переменная первоначально null или undefined.
Первая реализация была v >= 0 ? v += 1 : v = 0, потому что я думал, что что-то не число сделает арифметическое выражение ложным, но это было неправильно, так как null >= 0 оценивается как true. Затем я узнал, что null ведет себя как 0, и все выражения оцениваются как true.
-  
null >= 0 && null <= 0 -  
!(null < 0 || null > 0) -  
null + 1 === 1 -  
1 / null === Infinity -  
Math.pow(42, null) === 1 
Конечно, null не равен 0. null == 0 оценивается как false. Это делает кажущееся тавтологическое выражение (v >= 0 && v <= 0) === (v == 0) ложным.
Почему null как 0, хотя на самом деле это не 0?