javascript - UglifyJS 改变代码行为

标签 javascript uglifyjs

我有以下代码(为方便讨论而简化):

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

然后有一个 Grunt Uglify 任务将此代码转换为:

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

因为表达式的第一部分为真,第二部分(在 || 之后)没有执行,因此 b 保持不变。

因此,丑化代码与非丑化代码显示不同的输出。

这是一个已知问题吗?错误?如何预防,是否有解决此问题的选项/设置?

最佳答案

最新的 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 日的 repo 中合并。 UglifyJS v2.6.2 的输出相同。

UglifyJS v2.6.2 随 grunt-contrib-uglify 1.0.0 及更高版本一起提供。因此,请在必要时升级 grunt-contrib-uglify。

如果输出仍然存在问题,请随时在 https://github.com/mishoo/UglifyJS2 上提出问题使用代码片段

关于javascript - UglifyJS 改变代码行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36866972/

相关文章:

javascript - dragula JS 通过单击事件从一个列表移动到另一个列表

javascript - 如何抑制来自iframe的Internet Explorer 7上的脚本错误?

javascript - 如何提高 UglifyJsPlugin 的性能

javascript - 如何使用 Grunt 丑化子文件夹/子目录中的所有 javascript 文件?

javascript - 如何修复 uglifyjs 给我创建 bundle 的名称错误?

gruntjs - 使用 Grunt 和 Uglify - 观看时;编译多次(错误?)

javascript - 调用 Array.prototype.slice 时 Firefox 错误 'setting a property that only has a getter'

javascript - document.getElementById 似乎不起作用

javascript - JQuery 不能在 Tumblr 上工作?

build-process - CoffeeScript/UglifyJS 中的条件编译