どこかでこう言っているのを見ました。
x && foo();
に等しい
if(x){
foo();
}
私はそれをテストしましたが、彼らは本当に同じことをしました。
しかし、なぜ?正確には何x && foo()
ですか?
どこかでこう言っているのを見ました。
x && foo();
に等しい
if(x){
foo();
}
私はそれをテストしましたが、彼らは本当に同じことをしました。
しかし、なぜ?正確には何x && foo()
ですか?
AND 演算子と OR 演算子の両方をショートカットできます。
その&&
ため、最初の式が true の場合にのみ 2 番目の式を試行します (より具体的には、真実のように)。2 番目の操作が何かを行うという事実 (の内容が何であれ) は、最初の式が何か真実に評価されない限りfoo()
実行されないため、問題ではありません。真である場合は、2 番目のテストを試みるために実行されます。
逆に、||
ステートメントの最初の式が true の場合、2 番目の式には影響しません。これが行われるのは、ステートメント全体が既に評価されているためです。ステートメントは 2 番目の式の結果に関係なく true になるため、ステートメントは無視され、実行されません。
もちろん、このようなショートカットを使用するときに注意すべきケースは、定義された変数が偽の値 ( など0
) や真の値 ( など) に評価される演算子の場合'zero'
です。
これは短絡評価として知られています。
この場合、x
が False の場合、foo()
評価する必要はありません ( の結果&&
は常に False になります)。が True の場合x
、評価する必要があります (結果が破棄されたとしても)。
正確には同等ではありません。最初のものは、使用できる戻り値を持つ式です。2 つ目はステートメントです。
戻り値 (つまり、 と の両方が真の値x
にfoo()
評価されるかどうかの情報) に関心がない場合、それらは同等ですが、通常、ブール値として使用する場合にのみブール論理バージョンを使用する必要があります。式、例:
if (x && foo()) {
do_stuff();
}
条件付きで実行する (x が true の場合) だけに関心がある場合はfoo()
、意図がより明確に伝わるため、2 番目の形式をお勧めします。
人々がブーリアン ロジック バージョンを好む理由は、javascript が通常とは異なる制限を受ける可能性があるためです。ブール論理バージョンは使用する文字が少ないため、帯域幅効率が高くなります。問題のスクリプトが頻繁に使用されない限り、ほとんどの場合、より冗長なバージョンを好みます.jQueryのようなライブラリの場合、このような最適化を使用することは完全に正当化できますが、他のほとんどの場合はそうではありません.
JavaScript では、&&
演算子は左から右に評価され、一番右の操作の値を返します。最初の条件が false と評価された場合、2 番目の条件は評価されません。したがって、「何かがnullまたは未定義でない場合は、何かを行う」という省略表現です
短絡です。
演算子は次の&&
ように機能します。両側の 2 つのオペランドの論理和を実行します。左辺にゼロ以外の値がある場合、右辺が評価されて真の値が決定されます。左辺がゼロの場合、右辺が何であれ、式は 0 に評価されるため、右辺は評価されません。実際には、x
がゼロでない場合は のみfoo
が呼び出され、x
が 0の場合は は呼び出されないため、この場合foo
のように機能します。if - else