2011-11-09 20 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

IMOでは、 '!!'の使用例はめったにありません。問題のコードはおそらく私が今まで見たことの中で最悪のものです。 –

0

boolにキャストするのはとてもスマートな方法です。

+2

この状況でブールにキャストされるのは何ですか? –

2

論理NOT演算子( "!")を使用して、trueとfalseの間の変換が行われます。

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

しかし、それは値を強制します。ゼロ以外の数字と空でない文字列は真です。だから彼らは偽になる。

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

2つのNOTを使用すると、元のブール値に戻ります。

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

ブールコンストラクタの呼び出しと同じです。しかし、速く(関数呼び出しのオーバーヘッドなし)、短く、読みやすくなります。

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

この場合、どの値がブール値に変換されますか? –

+0

一般的な構文は、変数値がブール値に強制される "!! value"です。 –

+0

質問内のコードの式は、すでにブール値です。 –

関連する問題