2011-10-26 12 views
3

オブジェクト値をブール値に変換して変数に保存する場合を理解できます。しかし、私はjQueryテンプレートで次のコードを見つけました。 (二重の感嘆符演算子)も必要です。です!演算子はJavascriptでも必要ですか?

{{if !!sectionId}} 
    // do something... 
{{/if}} 

JavaScriptが自動的にif as booleanに続く式を評価するので、私は仮定しません。したがって、次のように書くことができます:

{{if sectionId}} 
    // do something... 
{{/if}} 

私は私の前提に正しくありますか?

+0

Possibeます。http:// stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – kieran

+0

可能な複製http://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript – jbabey

+0

これはほとんどのクローズドなIMO:[javascriptで二重の(!!)演算子を使用する方法](http://stackoverflow.com/questions/2174297/how-to-use-the-double-not-operator-in-javascript ) – CMS

答えて

8

JavaScriptには!!演算子はありません。ちょうど!があります。あなたが見ているのは、その単一の演算子の倍のアプリケーションです。

!の単一のアプリケーションは、引数の真理値を評価することによってブール値を返し、ブール値を逆にします。したがって、第2の!は、のブール値の逆数、つまりの値を返します。したがって、元の値のブール値「真実性」です。

個人的に私はあなたの例のように、単純なif文でそれを使用することはありませんが、それは明示的にブール型指定されたパラメータをチェックするかもしれないAPIの便利です:重複し

someAPI(!! someExpression); 
+0

私はそれを実現します。私はこの投稿を最初に見ていたhttp://stackoverflow.com/questions/784929/what-is-the-operator-in-javascript。この実装を使用してもこのような状況が必要な場合は、私はまだ不思議です。 –

+3

コードが何らかの理由で*本当に*ブール値を必要とするときに必要です。いくつかのAPIは、明示的にブール値をチェックし、関数の引数リストなどで真理値をチェックしません。 – Pointy

+0

型セキュリティは、関数がブール値を返すことを確認したい場合は、型キャストが重要です。 this.foo || this.bar) 'は他の言語では不要ですが、' || 'と' && 'は実際にブール値を返さないので、最初の' truthy'値と 'falsey'値を返しますそれぞれ)。 – zzzzBov

関連する問題