2013-04-22 65 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