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