是什么这两个词的区别:逻辑差异的JavaScript
if(counter % 4 != 0)
if(counter % 4 == !0)
我看不到任何的逻辑差异,但我的计算机做(和我100%肯定我的电脑比我更合乎逻辑)。
所有洞见赞赏。 !
是什么这两个词的区别:逻辑差异的JavaScript
if(counter % 4 != 0)
if(counter % 4 == !0)
我看不到任何的逻辑差异,但我的计算机做(和我100%肯定我的电脑比我更合乎逻辑)。
所有洞见赞赏。 !
的!
(不)运营商在JavaScript执行强制类型转换 - 它会尝试将该值转换为布尔(true或false)值。 0在JavaScript中是falsy,所以!0与false相反,即true。
所以你的第一个if
仍然是相同的:
if(counter % 4 != 0)
但第二个实际上是
if(counter % 4 == true)
这是绝对不一样的。
编辑:
的JavaScript也确实使用非严格!=
和==
运营商时(相对于严格!==
和===
)类型强制所以在这种情况下,如果counter % 4
变为1,这将评估为true
因为1
是真实的价值。
这里的falsy值在JavaScript中的列表:http://www.sitepoint.com/javascript-truthy-falsy/
如果您尝试它可能会更有意义阅读代码文本:
counter % 4
一样not 0
?not 0
,或!0
,使在Javascript true
,所以它会是:
counter % 4
一样true
?该声明的结果取决于counter
的值。请参阅Google Chrome的Javascript控制台以进行说明:
注意'== true'上的类型强制将是'ToNumber()'([11.9.3](http://es5.github.io/#x11.9.3)的[6-7]),导致'== 1'而不是测试'counter%4'的*真实性*。 – 2013-04-22 02:45:28
很好的解释和有用的额外见解。谢谢你,先生。 – user2240091 2013-04-22 03:02:13