使用默认值问题缩小 javascript

Minify javascript with default value issue

我有这样一个默认值的函数:

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

这工作得很好,但如果我尝试使用在线相关应用程序缩小我的 JS 文件,则会发生错误:

Error: Unexpected token operator '=', expected punc ','

据我所知,使用 = 设置 default value in Javascript 是合法的,那么为什么我会收到此错误?

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

Default parameters are a new features of EcmaScript, coming with ES6 (officially known as ES2015).

大多数缩小器都不是最新的。不过,您可以对大部分 ES6 使用 #harmony branch of uglifyjs

话虽这么说,因为它们的支持仍然有限,默认参数在浏览器中并不真正可用,除非

  • 你不关心 IE 用户
  • 或者你使用像Babel这样的转译器将代码从 ES6 转换为 ES5

如果您还没有准备好采用其中一种解决方案,请注意所有 MDN 页面的 "Browser Compatibility"

使用=为Javascript中的函数参数设置一个默认的默认值是一个ES6特性,目前只有Chrome49和Firefox 15.0支持:

由于浏览器支持有限,很少(如果有的话)缩小器已经支持此功能。

备选方案 1:

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

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

备选方案 2:

您可以使用 Babel 之类的转译器将 ES6 代码转换为旧版浏览器和压缩器可以理解的代码。

试试这个:

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
 }

如何缩小?如果你使用像 gulp 这样的东西,你可以用 pipe() 链接它,比如:

gulp('src.js').pipe(babel()).pipe(minify());

另一方面,您可以使用旧式 "defaults":

function (a, b) {
    b = b || 'default';
}