2013-03-27 35 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