我必须编写一个例程,如果变量的类型为number
,则将变量的值加1,否则将变量的赋值为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
被评估为false。这使看似重言式的表达成为(v >= 0 && v <= 0) === (v == 0)
错误。
为什么null
实际上不是0,却像0?
null
或的计数器undefined
:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined
是变量值,用于尚未初始化的变量。null
另一方面,是空对象值,不应与数字混合。null
不应与数字组合,因此null不必表现得像数字。