28

jQuery.form.js私はソースコードでこの行を見ました:

g && $.event.trigger("ajaxComplete", [xhr, s]);

私の最初の考えはwtfでしたか?

私の次の考えは、それが醜いのかエレガントなのか判断できないということでした。

私は決してJavascriptの第一人者ではないので、私の質問は2つあります。まず、正しく理解していることを確認したいと思います。上記の行は次と同等ですか?

if (g) {
    $.event.trigger("ajaxComplete", [xhr, s]);
}

そして第二に、これはJavascriptで一般的/受け入れられている慣行ですか?一方では簡潔ですが、他方では、これまでに見たことがない場合は少しわかりにくい場合があります。

4

6 に答える 6

18

はい、2つの例は同等です。ほとんどすべての言語でこのように機能しますが、Javascriptではかなり慣用的になっています。個人的には、状況によっては良いと思いますが、他の状況では悪用される可能性があります。ただし、これは間違いなく短くなります。これは、Javascriptの読み込み時間を最小限に抑えるために重要な場合があります。

John Resigのpretty.jsJavaScriptがどのように機能するかを誰かが説明できますか?も参照してください。

于 2011-02-19T05:15:09.310 に答える
10

これは標準ですが、JSLintJSHintも好きではありません。

代入または関数呼び出しを期待していましたが、代わりに式を見ました。

于 2011-02-19T05:56:46.560 に答える
5

||条件に がある場合、この短絡がバイパスされる可能性があるため、注意する必要があります。

false && true || true
> true

これを避けるには、必ず条件をグループ化してください。

false && (true || true)
> false
于 2014-01-23T22:30:52.963 に答える
4

ifはい、それはあなたが書いたのと同等です。それは確かに珍しいことではありません。それが受け入れられるかどうかは、誰が受け入れを行っているか(または行っていないか)によって異なります...

于 2011-02-19T05:14:21.170 に答える
2

はい、あなたはそれを理解しています(その文脈で); はい、JavaScriptの標準的な方法です。

于 2011-02-19T05:14:00.393 に答える
-1

デフォルトでは、jshint 警告がトリガーされます。

[jshint] 代入または関数呼び出しを期待していましたが、代わりに式を見ました。(W030) [W030]

ただし、個人的には、短絡バージョンの方が好きです。より宣言的で、「制御ロジックが少ない」ように見えますが、誤解かもしれません。

于 2018-11-16T10:22:56.563 に答える