2013-04-22 95 views
4

是什么这两个词的区别:逻辑差异的JavaScript

if(counter % 4 != 0) 
if(counter % 4 == !0) 

我看不到任何的逻辑差异,但我的计算机做(和我100%肯定我的电脑比我更合乎逻辑)。

所有洞见赞赏。 !

回答

6

!(不)运营商在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/

+2

注意'== true'上的类型强制将是'ToNumber()'([11.9.3](http://es5.github.io/#x11.9.3)的[6-7]),导致'== 1'而不是测试'counter%4'的*真实性*。 – 2013-04-22 02:45:28

+0

很好的解释和有用的额外见解。谢谢你,先生。 – user2240091 2013-04-22 03:02:13

-2

0是1,因此你的条件的是这样的:

if(counter % 4 != 0) 
if(counter % 4 == 1) 
+7

错; '!0'是'true'。 – SLaks 2013-04-22 02:28:54

+0

错误。警报(!0 + 2); ==> 3。如果(3 ==!0){alert('yes');} ==>什么都没有。如果(3){alert('yes');} ==>'是'。 – 7stud 2013-04-22 02:30:57

+3

'!0 +2'⇒3,但只因为'true + 2'= 3. – icktoofay 2013-04-22 02:31:31

1

如果您尝试它可能会更有意义阅读代码文本:

  • counter % 4一样not 0

not 0,或!0,使在Javascript true,所以它会是:

  • counter % 4一样true

该声明的结果取决于counter的值。请参阅Google Chrome的Javascript控制台以进行说明:

enter image description here