I had to write a routine that increments the value of a variable by 1 if its type is number
and assigns 0 to the variable if not, where the variable is initially null
or undefined
.
The first implementation was v >= 0 ? v += 1 : v = 0
because I thought anything not a number would make an arithmetic expression false, but it was wrong since null >= 0
is evaluated to true. Then I learned null
behaves like 0 and the following expressions are all evaluated to true.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1 / null === Infinity
Math.pow(42, null) === 1
Of course, null
is not 0. null == 0
is evaluated to false. This makes the seemingly tautological expression (v >= 0 && v <= 0) === (v == 0)
false.
Why is null
like 0, although it is not actually 0?
Question&Answers:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…