2016-04-26 5 views
2

ich den folgenden Code haben (aus Gründen der Diskussion vereinfacht):UglifyJS ändert den Code bahaviour

var a = 1; 
var b = []; 
if (checkIfAisOne(a)) { 
    b = ['something'] 
} 
console.log(b); 
//['something'] 

dann gibt es eine Grunt uglify Aufgabe, die diesen Code zu dieser konvertiert:

checkIfAisOne(a) || (b = ['something']), console.log(b); 
// [] 

Da der erste Teil des Ausdrucks wahr ist, wird der zweite Teil (nach ||) nicht ausgeführt und daher bleibt b unverändert.

So, Uglified-Code zeigt andere Ausgabe als nicht-Uglified-Code.

Ist das ein bekanntes Problem? Ein Käfer? Wie kann es verhindert werden, gibt es eine Option/Einstellung, um dies zu beheben?

+0

geben Sie bitte eine [MCVE]. diese sollten gleichwertig sein. vielleicht hat das fehlende Semikolon etwas damit zu tun. –

+3

@ DanielA.White Sollte es nicht '&&' anstatt '||' sein? –

+0

Ich würde hier einen ternären Operator erwarten .. – Pogrindis

Antwort

1

Neueste uglifyJS produziert diese Ausgabe:

var a=1,b=[];checkIfAisOne(a)&&(b=["something"]),console.log(b); 

Mit https://github.com/mishoo/UglifyJS2/commit/a0e03c9df47c411a40bceef02af2ce3dd1a329cc, die am 2016.03.05 begangen wird, aber in Repo 2016.04.05 verschmolzen. Die Ausgabe ist identisch mit UglifyJS v2.6.2.

UglifyJS v2.6.2 wird mit grunt-contrib-ugglify 1.0.0 und höher ausgeliefert. Also bitte upgruntieren falls nötig.

Wenn es noch ein Problem mit dem Ausgang ist, können Sie ein Problem auf https://github.com/mishoo/UglifyJS2 mit dem Code-Schnipsel öffnen