44

どこかでこう言っているのを見ました。

x && foo();

 に等しい

if(x){
    foo();
}

私はそれをテストしましたが、彼らは本当に同じことをしました。
しかし、なぜ?正確には何x && foo()ですか?

4

5 に答える 5

69

AND 演算子と OR 演算子の両方をショートカットできます。

その&&ため、最初の式が true の場合にのみ 2 番目の式を試行します (より具体的には、真実のように)。2 番目の操作が何かを行うという事実 (の内容が何であれ) は、最初の式が何か真実に評価されない限りfoo()実行されないため、問題ではありません。真である場合は、2 番目のテストを試みるために実行されます

逆に、||ステートメントの最初の式が true の場合、2 番目の式には影響しません。これが行われるのは、ステートメント全体が既に評価されているためです。ステートメントは 2 番目の式の結果に関係なく true になるため、ステートメントは無視され、実行されません。

もちろん、このようなショートカットを使用するときに注意すべきケースは、定義された変数が偽の値 ( など0) や真の値 ( など) に評価される演算子の場合'zero'です。

于 2011-08-07T02:35:14.417 に答える
24

これは短絡評価として知られています。

この場合、xが False の場合、foo()評価する必要はありません ( の結果&&は常に False になります)。が True の場合x、評価する必要があります (結果が破棄されたとしても)。

于 2011-08-07T02:38:04.987 に答える
8

正確には同等ではありません。最初のものは、使用できる戻り値を持つ式です。2 つ目はステートメントです。

戻り値 (つまり、 と の両方が真の値xfoo()評価されるかどうかの情報) に関心がない場合、それらは同等ですが、通常、ブール値として使用する場合にのみブール論理バージョンを使用する必要があります。式、例:

if (x && foo()) {
    do_stuff();
}

条件付きで実行する (x が true の場合) だけに関心がある場合はfoo()、意図がより明確に伝わるため、2 番目の形式をお勧めします。

人々がブーリアン ロジック バージョンを好む理由は、javascript が通常とは異なる制限を受ける可能性があるためです。ブール論理バージョンは使用する文字が少ないため、帯域幅効率が高くなります。問題のスクリプトが頻繁に使用されない限り、ほとんどの場合、より冗長なバージョンを好みます.jQueryのようなライブラリの場合、このような最適化を使用することは完全に正当化できますが、他のほとんどの場合はそうではありません.

于 2011-08-07T12:14:49.753 に答える
3

JavaScript では、&&演算子は左から右に評価され、一番右の操作の値を返します。最初の条件が false と評価された場合、2 番目の条件は評価されません。したがって、「何かがnullまたは未定義でない場合は、何かを行う」という省略表現です

于 2011-08-07T02:35:33.990 に答える
2

短絡です。

演算子は次の&&ように機能します。両側の 2 つのオペランドの論理和を実行します。左辺にゼロ以外の値がある場合、右辺が評価されて真の値が決定されます。左辺がゼロの場合、右辺が何であれ、式は 0 に評価されるため、右辺は評価されません。実際には、xがゼロでない場合は のみfooが呼び出され、xが 0の場合は は呼び出されないため、この場合fooのように機能します。if - else

于 2011-08-07T02:39:08.417 に答える