2016-04-26 69 views
2

我有以下代碼(簡化討論起見):UglifyJS改變代碼bahaviour

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

然後有一個咕嚕醜化任務使這一代碼轉換成這樣:

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

由於表達式的第一部分爲真,因此第二部分(在||之後)未執行,因此b保持不變。

所以,簡化代碼顯示不同於非簡化代碼的輸出。

這是一個已知的問題嗎?一個錯誤?如何防止,是否有任何選項/設置來解決這個問題?

+0

請提供[MCVE。這些應該是等同的。也許缺少的分號與它有關。 –

+3

@ DanielA.White不應該是'&&'而不是'''? –

+0

我期望這裏有一個三元運算符.. – Pogrindis

回答

1

最新uglifyJS正在生產輸出:

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

使用https://github.com/mishoo/UglifyJS2/commit/a0e03c9df47c411a40bceef02af2ce3dd1a329cc,這是在2016年3月5日提交,但在回購2016年4月5日合併。 UglifyJS v2.6.2的輸出是相同的。

UglifyJS v2.6.2附帶grunt-contrib-uglify 1.0.0及更高版本。所以如果需要請升級grunt-contrib-uglify。

如果仍然與輸出的問題,可隨時對https://github.com/mishoo/UglifyJS2打開一個問題的代碼片段