我必须编写一个例程,如果变量的类型为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 === 11 / null === InfinityMath.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不必表现得像数字。