这个缩小的JS与这个未压缩的版本相同怎么样?

mar*_*ion 1 javascript

所以这就是我未压缩的样子:

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

这是压缩版本:

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

我感到困惑的e=!0是等同all_selected = truethis.selectedIndex==0if语句的压缩版本.在压缩版本中,它表示if此索引== 0,然后将其设置为false.

但在压缩版本,它看起来像它正在检查selectedIndex等于0,且&&all_selected = false(即e=!1).但我不希望那条作为if条件,那应该是if条件满足后的结果.

我读错了吗?

PS压缩版本在生产中不起作用,但未压缩版本在开发中工作.我不确定这两者是否相关,但从表面上看,它们似乎与我不相同.

编辑1

我怀疑,我通过JS预处理器运行缩小的JS,这是结果:

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

洙...啊...... WTF正在这里发生?

Pat*_*shu 5

布尔形式的0为false,因此布尔否定为0(false)为真.

类似地,布尔形式的1为真,因此1(真)的布尔否定为假.

&&是短路'和'运算符,意味着只要它知道它的结果是什么,它立即返回 - 如果它的第一个操作数是假的,它返回false.如果它的第一个操作数为true,则它仅计算第二个操作数并返回该操作数.

因此e=!1只有在this.selectedIndex==0为真时执行(因为如果它是假的,它知道它会返回false并提前中止).