2011-11-09 27 views
3

請參閱http://webmail.mac.com來源。使用的目的是什麼!在這個情況下?

B.incompatible = !!(B.msie < 7 || B.safari < 500 || B.mozilla < 1.008000999); 
    B.unsupported = !!(B.opera || B.safari < 500) && !B.incompatible; 
    B.supported = !B.incompatible && !B.unsupported; 

爲什麼雙「!」在這裏使用?有沒有什麼好處?

+0

它將一個值強制爲布爾值。 –

+2

沒時間搜索?或者在你寫問題的時候看看在你的問題中出現的「相關」列表的頂部,試圖阻止你發佈這個沒有意義的副本? –

+0

請參閱http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – Irishka

回答

4

在這種情況下沒有意義,因爲無論如何表達式已經計算爲布爾值。這可能只是一個「額外確定」的程序員。

+0

嗯,我錯過了'B.opera',但即使在這種情況下,整個表達式仍然會評估爲布爾值(因爲它的結構,不是因爲任何語言特性會強制隱含)。 –

+0

是的。國際海事組織,很少有'!!'的用例。有問題的代碼可能是我見過的最糟糕的代碼。 –

0

它是一個非常聰明的方式鑄造到布爾。

+2

在這種情況下會發生什麼? –

2

邏輯NOT運算符(「!」)用於將true轉換爲false,反之亦然。

! true // expresses false 
! false // expresses true 

但是,它也強制價值觀。非零數字和非空字符串是真的。所以他們變得虛假。

! 1.0 // expresses false 
! 0.0 // expresses true 
! '@' // expresses false 
! '' // expresses true 

使用兩個NOT將其轉換回原始布爾值。

!! 1.0 // expresses true 
!! 0.0 // expresses false 
!! '@' // expresses true 
!! '' // expresses false 

它相當於調用布爾構造函數。但是,速度更快(沒有函數調用開銷),更短,更具可讀性。

!! 1.0 === Boolean(1.0) // expresses true 
+0

在這種情況下,強制布爾值有什麼價值? –

+0

一般語法是「!! value」,其中變量值將被強制爲布爾值。 –

+0

問題中的代碼中的表達式已經是布爾值。 –

相關問題