2

||Jquery/Javascriptで実行される順序を理解するのに問題があります。

私がこれを持っている場合:

  someVar = $el.attr("one") || options.two || "three";

両方が定義されていない場合someVarは「3」に設定されます。$el.attr("one")options.two

このステートメントに次のような別の条件を追加する必要があります。

  someVar = $el.attr("one") || options.two || options.extra == "true" ? undefined : "three";

したがって、これは次のように言う必要があります。

どちらも定義されていないか、定義されていない場合は、がtrueであるかどうかを確認'$el.attr("one")'し、そうでない場合はに設定します。'options.two''options.extra == true''undefined''three'

undefinedでも、セットしてもいつも手に入る$el.attr("one")し、理由がわからないの?

誰かが私の論理の何が悪いのか教えてもらえますか?

ありがとう!

4

3 に答える 3

8

かっこを付けなければならないと思います。

someVar = $el.attr("one") || options.two || (options.extra == "true" ? undefined : "three");

実際、あなた自身のコードは次のように読み取られます。

someVar = ($el.attr("one") || options.two || options.extra == "true") ? undefined : "three";
于 2012-09-10T08:09:38.067 に答える
1

その理由は、? :結合が弱い||ため、最後に評価されるためです。これは、次のように書く場合と同じです。

( $el.attr("one") || options.two || options.extra == "true" ) ? undefined : "three";

最初の式は常にtrueであるため、これは常にundefinedになります(設定したため$el.attr("one")

それがあなたがそれを修正するためにparensを取る必要がある理由です:

$el.attr("one") || options.two || (options.extra == "true" ? undefined : "three");

演算子の優先順位表を確認してください。このような場合に便利です。

于 2012-09-10T08:14:51.093 に答える
0

論理演算子だけでそれを書く方法は

  someVar = $el.attr("one") || options.two || options.extra != "true" && "three" || undefined;

...実際のコードでそれを使用するわけではありません。(おそらく、論理演算子と条件演算子を混在させることはないでしょう。)

于 2012-09-10T08:59:06.550 に答える