我必须编写一个例程,如果其类型为number
,则将变量值增加1,如果不是,则将0赋值给变量,其中变量最初为null
或undefined
。为什么`null> = 0 && null <= 0`但不是`null == 0`?
第一个实现是v >= 0 ? v += 1 : v = 0
,因为我认为任何不是数字都会使算术表达式为false,但由于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
被评估为假。这使得似乎同义反复表达式(v >= 0 && v <= 0) === (v == 0)
错误。
为什么null
就像0,虽然它实际上不是0?
他正在谈的JavaScript。你的例子是在PHP中。在PHP中,运算符==以特殊方式比较值。你可以做一些非常疯狂的比较,比如“10”==“1e1”(这是真的)。如果使用operator ===,则会得到完全不同的结果,因为它会检查类型是否与值相匹配。查看此链接:http://www.php.net/manual/en/language.operators.comparison.php – Pijusn 2012-04-06 05:59:12
PHP'=='运算符确实以“特殊”方式工作。 – 2014-03-19 03:26:01
如果您的要求是从1开始计数而不是0,那么增加最初为'null'或'undefined'的计数器的方法非常简单:c = - 〜c //结果为1 for null/undefined;如果已经有一个数字,则增加' – 2017-09-12 16:24:37