我需要编写一个程序来实现一个变量加1的操作,如果该变量是number
类型则将其加1,否则将其赋值为0。该变量最初的值是null
或undefined
。
第一次实现的代码是v >= 0 ? v += 1 : v = 0
,因为我认为任何不是数字的东西都会使算术表达式为假,但是这是错误的,因为null >= 0
被计算为true。然后我了解到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)
为false。
为什么null
虽然不是0,但却像0一样呢?
null
或undefined
的计数器:c = -~c // 如果为null/undefined,则结果为1;如果已经是数字,则递增
。 - Ates Goralundefined
是一个变量值,用于未初始化的变量。另一方面,null
是一个空对象值,不应与数字混合使用。null
不应与数字组合使用,因此null
不必像数字一样运作。 - Matthew