6
(myVar && foo())

上記のコードはどういう意味ですか?それは何に相当しますか?

私はそれが単一の行で実行されると思います。

4

5 に答える 5

8

myvar式は、 ifmyvarが偽であり、foo()ifが真であると評価されmyvarます。次のスニペットはほぼ同じです。

var x = (myvar && foo());

if(myvar){ var x = foo(); } else { var x = myvar; }
于 2010-01-11T22:40:22.833 に答える
4

これは、「myVarがfalseでない場合は、関数foo()を実行する」と同等の式です。次のように使用var x = (myVar && foo())すると、結果は次のようになります。

myVarがfalseでない場合、xはfoo()の出力に設定されます。myVarがfalseの場合、xはmyVarの値に設定されます。

于 2010-01-11T22:33:36.947 に答える
3

foo()関数は、myVarがfalseyでない場合にのみ呼び出されます。つまり、false、 ""、0、null、またはundefinedにすることはできません。(他のもの?)

次のような例を見るのがより一般的です。

window.console && console.log("some helpful debug info");

これは次のように解釈されます...

「'window'変数に'console'というメンバーがある場合...」

(コンソールが未定義の場合、falseではなくJavaScriptエラーが発生するため、「console」の前に「window」を付けることが重要です。)

"...'console'オブジェクトの'log'メソッドを呼び出します。"

于 2010-01-11T22:49:18.073 に答える
1

この式は、ブール式の短絡を巧みに利用しています。foo()は、myVarが。と評価された場合にのみ実行されtrueます。

if (myVar) {
    foo();
}

はるかに明確です。この種のコードが理にかなっている場合もあるでしょうが、スタイルチェッカー(この種のことに興味がある場合)はそれに適合します。http://javascript.crockford.com/code.htmlを参照してください。セミコロンの挿入と式のステートメントに依存しないようにすることをお勧めします。

編集:var x = a && b();特定の状況ではおそらくそれほど悪い考えではないことに注意してください。しかし、(a && b())それ自体はいくつかの点で間違っています。(セミコロンの挿入、式のステートメント、意味的に不可解である以外)

于 2010-01-11T22:34:11.360 に答える
0

&&が評価されると、左側が最初に評価されます。つまりmyVar、これが当てはまる場合は、右側のみが評価されfoo()ます。これは、ステートメントA && BでAがfalseの場合、式A&&Bは常にfalseと評価されるためです。

上記のステートメントは通常、次のように使用されます。

var x = myVar && foo();

これは次のように書くこともできます:

if myVar is truee x = foo(), else x = false
于 2010-01-11T22:55:30.127 に答える