2015-04-20 24 views
6

我發現這段代碼在jQuery的遷移V1.1.1這是什麼JavaScript片段並(啓動jQuery的遷移文件)

jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){/* anything */} 

我真的想知道兩件事情:

1)===void 0是什麼意思?

2)爲什麼這些條件後跟逗號?我的測試表明它會一直執行。

它只是不是我真的需要知道,但我真的很感興趣,因爲我認爲我知道關於JS的一切。 ;)

+1

檢查這個線程:http://stackoverflow.com/questions/4806286/difference-between-void-0 - 未定義 –

+0

請參閱此代碼使用的最小化程序uglify2。 https://github.com/mishoo/UglifyJS2#the-unsafe-option在該頁面上搜索「void 0」。 –

回答

4

void 0將產生undefined,對於任何Xvoid X;它更短,並且不能像undefined那樣得到重新定義。所以===void 0比較jQuery.migrateMuteundefined

!0true

因此, 「翻譯」 的jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0)是:逗號執行

然後東西后
if (jQuery.migrateMute === undefined) { 
    jQuery.migrateMute = true; 
} 

,獨立於這一點。

+0

通過查看源代碼很容易看到。 https://github.com/jquery/jquery-migrate/blob/master/src/migratemute.js你忘了'typeof'。 OPs代碼是最小化版本,因此他的問題確實是「最小化器用JS代碼做什麼」...... –

+0

@MörreNoseshine:沒忘記'typeof' - 我沒有看源代碼(但好處,我應該),並且'x === undefined'等同於'typeof(x)===「undefined」'只要沒有人做了像'undefined = 13'這樣的愚蠢的東西。 – Amadan

+0

我知道它是相同的,我只是指在這裏給出的來源真正發生的事情。並參見https://github.com/mishoo/UglifyJS2#the-unsafe-option(使用uglify2進行縮小) –

0

彙總所有的意見和答案...

  1. void 0void(0)只是默認的undefined值。這就是爲什麼你可以使用它而不是未定義的,以確保它不被某人覆蓋。 here the source

  2. 而且這個結構,這意味着相同的:

    if(x){y=z};function(){/*...*/}; 
    
相關問題