2011-06-27 14 views
3

私はunderscore.jsのSRCを調べ、発見されたこの:Javascript論理演算子:?

_.isRegExp = function(obj) { 
    return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false)); 
}; 

たのはなぜ "!!"中古?それはNOT-NOTとして読まれるべきか、ここでは何か難解なJSニュアンスが起こっていますか?

+0

難解なJSのニュアンス笑 – dynamic

+1

それは、速記、ない難解なJSのニュアンスと呼ばれています。同じように、 '+'演算子を使って数値に変換する( '+" 0 "')、文字列に変換するために '+" "を使う方法と同じです。 – HoLyVieR

+1

可能な複製は何ですか? JavaScriptの演算子?](http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript) –

答えて

12

結果をブール値にキャストするのは単なる鈍い方法です。

+1

素敵な知らなかった – dynamic

2

はい、NOT NOTです。それは、値を同等の真実性のブール値に変換するためによく使われるイディオムです。

JavaScriptはとしてfalsy 0.0''nullundefinedfalseを理解し、他の値(明らかに、trueを含む)としてtruthy。このイディオムは、すべての前者をブール値falseに変換し、後者をブール値trueに変換します。 ab両方がtruthyある場合

この特定のケースでは、

a && b 

bを返すであろう。 ab両方がtruthyある場合

!!(a && b) 

trueを返します。

+1

あなたはNaNを忘れてしまった。 – user113716

+0

ああ、私はやったよ:) – Amadan

0

それはちょうど2つです!オペレータは互いに隣り合っています。しかし、あなたが使っていない限り、二重否定は無意味です!ブール型に変換する演算子のように。

それが真か偽には何も変換されます...

1

& &オペレータ戻り偽のいずれかまたは式の最後の値:

("a" && "b") == "b" 

||演算子は、真と評価する最初の値を返します

("a" || "b") == "a" 

!演算子はブール値を返します

!"a" == false 

したがって、変数をブール値に変換する場合は、使用することができます。

など
var myVar = "a" 
!!myVar == true 

myVar = undefined 
!!myVar == false