2015-04-20 4 views
6

ich dieses Stück Code in jQuery Migrate v1.1.1Was bedeutet das Javascript Snippet wird (Start von jQuery Migrationsdatei)

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

Und ich frage mich wirklich über 2 Dinge gefunden haben:

1) Was bedeutet ===void 0?

2) Warum folgt auf diese Bedingungen ein Komma? Meine Tests haben gezeigt, dass es immer ausgeführt wird.

Sein Ich muss nur wissen, nicht wirklich, aber ich bin wirklich interessiert, weil ich dachte, dass ich alles über JS wusste. ;)

+1

prüfen dieses Themas: http://stackoverflow.com/questions/4806286/difference-between-void-0 -und-undefined –

+0

Siehe den Minimizer, der für diesen Code verwendet wurde, uglify2. https://github.com/mishoo/UglifyJS2#the-unsafe-option Suche nach "void 0" auf dieser Seite. –

Antwort

4

void 0 nachgeben undefined, ebenso wie für jeden void XX; es ist kürzer und kann nicht neu definiert werden wie undefined kann. So vergleicht ===void 0jQuery.migrateMute mit undefined.

!0 ist true.

Somit ist die "Übersetzung" von jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0) ist:

if (jQuery.migrateMute === undefined) { 
    jQuery.migrateMute = true; 
} 

Dann wird das Material nach dem Komma ausführt, unabhängig von diesem.

+0

Das kann man leicht sehen, wenn man sich die Quelle anschaut. https://github.com/jquery/jquery-migrate/blob/master/src/migra- mute.js Sie haben einen 'typeof' vergessen. Es war vorrausichtlich, dass der OPs-Code die minimierte Version ist, also ist seine Frage wirklich "Was macht ein Minimizer mit JS-Code?" –

+0

@ MörreNoseshine: Ich habe "typeof" nicht vergessen - ich habe die Quelle nicht angesehen (aber guter Punkt, sollte ich haben), und "x === undefiniert" ist gleichbedeutend mit "typeof (x) ===" undefined "' solange niemand etwas dummes wie 'undefined = 13' gemacht hat. – Amadan

+0

Ich weiß, es ist gleichbedeutend, ich bezog mich nur auf das, was hier wirklich geschieht, wenn man die Quelle betrachtet. Und siehe https://github.com/mishoo/UglifyJS2#the-unsafe-option (das wurde mit uglify2 minimiert) –

0

Zusammengefasst alle Kommentare und Antworten ...

  1. void 0 oder void(0) nur der Wert von undefined standardmäßig. Deshalb können Sie es anstelle von undefined verwenden, um sicher zu sein, dass es nicht von jemandem überschrieben wird. here the source

  2. Und über dieses Konstrukt, bedeutet dies das gleiche wie:

    if(x){y=z};function(){/*...*/};