私はunderscore.jsのSRCを調べ、発見されたこの:Javascript論理演算子:?
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
たのはなぜ "!!"中古?それはNOT-NOTとして読まれるべきか、ここでは何か難解なJSニュアンスが起こっていますか?
私はunderscore.jsのSRCを調べ、発見されたこの:Javascript論理演算子:?
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
たのはなぜ "!!"中古?それはNOT-NOTとして読まれるべきか、ここでは何か難解なJSニュアンスが起こっていますか?
はい、NOT NOTです。それは、値を同等の真実性のブール値に変換するためによく使われるイディオムです。
JavaScriptはとしてfalsy 0.0
、''
、null
、undefined
とfalse
を理解し、他の値(明らかに、true
を含む)としてtruthy。このイディオムは、すべての前者をブール値false
に変換し、後者をブール値true
に変換します。 a
とb
両方がtruthyある場合
この特定のケースでは、
a && b
はb
を返すであろう。 a
とb
両方がtruthyある場合
!!(a && b)
はtrue
を返します。
あなたはNaNを忘れてしまった。 – user113716
ああ、私はやったよ:) – Amadan
それはちょうど2つです!オペレータは互いに隣り合っています。しかし、あなたが使っていない限り、二重否定は無意味です!ブール型に変換する演算子のように。
それが真か偽には何も変換されます...
& &オペレータ戻り偽のいずれかまたは式の最後の値:
("a" && "b") == "b"
||演算子は、真と評価する最初の値を返します
("a" || "b") == "a"
!演算子はブール値を返します
!"a" == false
したがって、変数をブール値に変換する場合は、使用することができます。
などvar myVar = "a"
!!myVar == true
myVar = undefined
!!myVar == false
難解なJSのニュアンス笑 – dynamic
それは、速記、ない難解なJSのニュアンスと呼ばれています。同じように、 '+'演算子を使って数値に変換する( '+" 0 "')、文字列に変換するために '+" "を使う方法と同じです。 – HoLyVieR
可能な複製は何ですか? JavaScriptの演算子?](http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript) –