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