1

だからこれは私の非圧縮がどのように見えるかです:

function extractDropdownValues(){     
  var all_selected = true;
  $('.variant_options select').each(function() { 
      if (this.selectedIndex == 0) {
          all_selected = false;
      }
  });

これは圧縮バージョンです:

extractDropdownValues(){var e=!0;$(".variant_options select").each(function(){this.selectedIndex==0&&(e=!1)});

e=!0ifステートメントと同等であることに混乱しています。all_selected = trueまた、圧縮バージョンのthis.selectedIndex==0ifステートメントにも混乱しています。圧縮バージョンでは、ifこのインデックス== 0と言ってから、falseに設定します。

selectedIndexしかし、圧縮バージョンでは、が0に等しいかどうかをチェック&&しているように見えますall_selected = false(つまりe=!1)。しかし、私はそれを条件として望んでいません、それは条件が満たされifた後の結果であるべきです。if

私はこれを間違って読んでいますか?

PS圧縮バージョンは本番環境では機能していませんが、非圧縮バージョンは開発環境で機能しています。この2つが相関しているのかどうかはわかりませんが、表面的には、私と同じではないようです。

編集1

私が疑ったように、私は縮小されたJSをJS prettifierに通しました、そしてこれは結果です:

function extractDropdownValues() {
    var e = !0;
    $(".variant_options select").each(function () {
        this.selectedIndex == 0 && (e = !1)
    });

Soo ... ahh ... WTFはここで起こっていますか?

4

1 に答える 1

5

ブール形式の0はfalseであるため、0(false)のブール否定はtrueです。

同様に、ブール形式の1はtrueであるため、1(true)のブール否定はfalseです。

&&は短絡'および'演算子です。つまり、結果が何であるかがわかるとすぐに返されます。最初のオペランドがfalseの場合、falseが返されます。最初のオペランドがtrueの場合にのみ、2番目のオペランドを評価して返します。

したがって、trueのe=!1場合にのみ実行されthis.selectedIndex==0ます(falseの場合、falseが返され、早期に中止されることがわかっているため)。

于 2013-03-27T05:02:54.323 に答える