2013-03-27 47 views
1

因此,这是我的未压缩的样子:这是如何缩小JS与这个未压缩版本相同?

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=!0是的all_selected = true,也由this.selectedIndex==0压缩版本的等同混淆如果声明。在压缩版本中,它表示if此索引== 0,然后将其设置为false。

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

我看到这个错误吗?

P.S.压缩版本在生产中不起作用,但未压缩版本正在dev中工作。我不确定这两者是否相关,但表面上看,它们似乎与我不一样。

编辑1

正如我怀疑,我通过JS prettifier跑缩小的JS,这是结果:

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

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

+0

我认为这个脚本正在检查在每次选择中选择了除第一个之外的选项。请注意,如果未选择任何选项,那么* selectedIndex *将为-1,脚本将评估是否选择了一个选项(即* selectedIndex *不是0)。因此,所有选择都不能选择选项,* all_selected *将被设置为“true”。测试应该是'this.selectedIndex> 0' – RobG 2013-03-27 06:03:09

回答

5

0在布尔形式为false,所以0(假)的布尔否定为真。

类似地,布尔型中的1为真,所以1(真)的布尔否定为假。

&&是短路'和'运算符,意思是只要它知道它的结果是立即返回的 - 如果它的第一个操作数是假的,它将返回假。如果它的第一个操作数是真的,那么它只能评估第二个操作数并返回它。

所以e=!1只有在this.selectedIndex==0为真的情况下才会执行(因为如果它是假的,它就知道它将返回false并提前中止)。

+0

叶......我知道。我不是在辩论这一点。布尔逻辑似乎是正确的。问题是if语句。我用美化JS的结果更新了这个问题。 – marcamillion 2013-03-27 05:03:46

+0

@marcamillion查看我的更新回答 – Patashu 2013-03-27 05:04:46

+0

所以你说我的未压缩版本和缩小版本是一样的? – marcamillion 2013-03-27 05:08:14