108

我创建了一个这样的函数:

function saveItem(andClose = false) {

}

它在 Firefox 中运行良好

在 IE 中,它在控制台上给出了这个错误: Expected ')'

在 Chrome 中,它在控制台中给出了这个错误: Uncaught SyntaxError: Unexpected token =

两种浏览器都将错误的来源标记为函数创建行。

4

5 回答 5

166

你不能这样做,但你可以这样做:

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}

这通常缩短为:

function setName(name) {
  name = name || 'Bob';
}

更新

以上对于 ECMAScript <= 5 是正确的。ES6 提出了Default parameters。所以上面可以改为:

function setName(name = 'Bob') {}
于 2013-03-02T19:53:33.787 回答
14

这不是有效的 ECMAScript 语法,但它是 Mozilla 添加到语言实现中的超集功能的有效语法。

默认参数分配语法可能会出现在 ECMAScript 6 中。

于 2013-03-02T19:51:30.357 回答
9

Javascript 不允许使用“默认”说明符。

一种快速做你想做的事情的方法是改变:

function saveItem(andClose = false) {

}

到以下:

function saveItem(andClose) {
    // this line will check if the argument is undefined, null, or false
    // if so set it to false, otherwise set it to it's original value
    var andClose = andClose || false;

    // now you can safely use andClose
    if (andClose) {
        // do something
    }
}
于 2013-03-02T19:55:30.353 回答
2

您提供的代码不会在 Chrome < 版本 49 中运行: https ://kangax.github.io/compat-table/es6/#test-default_function_parameters

您使用了有效的 ECMAScript 2015 语法:

在我看来,使用 ES2015 功能的最佳方式是使用BrowserifyWebPack捆绑资产,其中包含使用Babel将 ES2015 反编译为 ES5 的步骤。这样你就不用担心那个 ES2015 浏览器兼容性图表了。第一次开始很痛苦,但值得。

于 2015-12-27T14:18:30.090 回答
1

在您的情况下,您还有另一种选择来确保您的变量是布尔值:

function saveItem(andClose) {
  andClose = true == andClose;
  // ...
}

默认值为undefined, 和true == undefined=> false,因此您的默认值为false:)

于 2020-01-24T13:12:34.900 回答