2012-03-15 3 views
4

私はこのJSプラグインで作業しています。私はそれが何をしているのか理解していますが、なぜそれが働くのか分かりません。ここでJS構文とは何ですか?表現の代入? (x!= null &&(y = x))

はそれの1つのインスタンスの例です:

settings.maxId != null && (params.max_id = settings.maxId); 

は条件文と単一=の本だけで活かしますか?これはJSの一般的な構文ですか?

+0

こんにちはこれは悪いコードだと思われます - (!=)は等しくないことを意味し、オブジェクトがnullでないかどうかをチェックし、2番目の条件(=)は代入を意味します - なぜこのインスタンスの条件文で使用されるのでしょうか?乾杯! –

+0

@Tats_innit:条件文はどこですか?このコードは完全に有効です。それはちょうど愚かです。 –

+0

@ LightnessRacesinOrbit Hiya Srry男私は推測します**条件付き**私は間違っていればヌルチェック、ありがとう、スリリングを使用しているので - ああクールなので、それは実際には悪い声明です! Cheers –

答えて

13

をチェックする必要はありません。 であるため、副作用が発生しても、式はであればどこでも使用できます。 したがって:

settings.maxId != null && (params.max_id = settings.maxId) 

手段:settings.maxIdがNULLでない場合(とだけにし&&short circuitingであるため)が順番にsettings.maxIdの値が割り当てられることになり、右式(params.max_id = settings.maxId)を評価しますparams.max_id。コーディング

if (settings.maxId != null) { 
    params.max_id = settings.maxId 
} 

ハッピー: これは、はるかに明確にとして書かれです。

3

このステートメントが原因&&は、この動作は、それが必要だまでJavaScriptが条件を評価することに起因する短絡の論理演算子

であるという事実にのみsettings.maxId != null場合params.max_id = settings.maxIdを割り当てます。最初の条件が偽であり、第二の場合はこのように、AND=オペレータが表現で、割り当てられた値を評価JavaScriptではさらに

3

&&演算子は、 "boolean AND"と呼ばれます。一般的に、あなたはif文でそれを参照してくださいね。

if (x == true && y == false) { 

が、それは制限はありません。あなたは論理「AND」操作に応じて、単一のブール結果にそのオペランドのブール値を「組み合わせる」への任意の有効な式でそれを使用することがあります。

var z = (x == true && y == false); 
// z is now true or false, accordingly 

&&程度素敵なことの一つはそれということです"短絡"。 false && trueでは、最初のオペランドがfalseであるため、式全体はfalseと評価されるだけなので、2番目のオペランドは評価されません。

のは、それを再度確認してみましょう:このステートメントで

var z = (false && foo()); 
// z is now false 

、機能fooがでも呼び出されることはありません!プログラムがzfalse.

になることを知るためには、これは必須ではありません。これは最適化以外にも、—に依存しています。ちょうどのような式にすることができ、今

(x == 0) && foo(); 

その割り当てを検討してください。

if (x == 0) { 
    foo(); 
} 
読みにくい単一の式に

一部の愚かな人々は、条件文を書き換えるためにこの手法を使用します関数呼び出し:

var a = (b = c); 

または

var a = (b = foo()); 

そして、上記の技術を経由して、条件に追加します:xが原因で短絡により、0ない場合は今すぐ、式全体b = foo()はまったく評価されません

var a = ((x == 0) && (b = foo())); 

私たちも、&&操作の結果で何もする必要はありませんし、我々はaにそれを保存しない場合はあなただけが残っている:文である

(x == 0) && (b = foo()); 

ことbfoo()の値に割り当てるのは、x0の場合のみです。

避けてください。読むのは難しいです。ちょうどifステートメントを使用してください。

+0

あなたはonelinerの素晴らしさを決して理解しません... – m93a

関連する問題