使用默认值时压缩JavaScript的问题

16

我有一些带有默认值的函数,就像这样:

function f(a, b = 'something') {
    //do stuff
}

这段代码本来没问题,但如果我试图使用在线相关应用程序压缩JS文件,则会出现错误:

错误:意外的令牌运算符“=”,预期标点符号“,”

据我所知,在Javascript中使用=设置默认值是合法的,那为什么我会收到这个错误消息?

我必须在函数体中定义默认值吗?


4
这是ES6带来的一项新语言能力。大多数压缩工具并没有更新到最新版本,所以你不提及的那个可能也没有。你可以使用uglifyjs的#harmony分支。 - Denys Séguret
4个回答

18

在Javascript中,使用=为函数参数设置默认值是ES6的一项特性,目前仅由Chrome 49和Firefox 15.0支持:

enter image description here

由于浏览器支持有限,目前很少(或根本没有)混淆器已经支持此功能。

备选方案1:

您可以像这样设置默认参数:

function f(a, b) {
    b = typeof b  === 'undefined' ? 'something' : b;
    //do stuff
}

备选方案2:

您可以使用转译器(例如 Babel)将ES6代码转换为旧版浏览器和代码压缩工具所理解的内容。


@3p3ch3:ES6 = ES2015 - John Slegers

2
默认参数”是EcmaScript的一项新功能,随ES6(正式称为ES2015)一起推出。
大多数缩小器并不是最新的。你可以使用{{link3:uglifyjs的#harmony分支}}来处理大部分ES6。
话虽如此,由于它们的支持仍然有限,除非:
  • 您不关心IE用户
  • 或者您使用一个类似Babel的转换器将代码从ES6转换为ES5。
如果您还没有准备好使用这些解决方案,请注意所有MDN页面的{{link5:“浏览器兼容性”}}信息。

1
如果你使用像gulp这样的工具,你可以通过pipe()来链接它,从而实现代码压缩。
gulp('src.js').pipe(babel()).pipe(minify());

另一方面,您可以使用旧式的“默认值”:
function (a, b) {
    b = b || 'default';
}

0

试试这个:

function someFunction(a,b){
    a=(a=='bool condition here':a,'default value');//a is a optional parameter variable now with a default value
    b=(b=='bool condition here':b,'default value');//b is a optional parameter variable now with a default value
 }

非常有趣的方式.. 你可以将条件写成 (a != null)?a:'defaultVal'.. - zion
是的,任何布尔条件都可以放在那里。 - Ciprian Turcu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接