函数和默认参数,不工作在IE和Chrome

Javascript Functions and default parameters, not working in IE and Chrome

本文关键字:IE Chrome 工作 默认 参数 函数      更新时间:2023-09-26

我创建了这样一个函数:

function saveItem(andClose = false) {
}

在Firefox中运行良好

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

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

两个浏览器都将错误源标记为函数创建行

您不能这样做,但是您可以这样做:

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

通常被缩短为:

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

更新

以上对于ECMAScript <= 5是正确的。ES6提供了建议的默认参数。所以上面的代码可以写成:

function setName(name = 'Bob') {}

这不是一种有效的ECMAScript语法,但对于Mozilla添加到该语言实现中的功能超集来说,这是一种有效的语法。

默认的参数赋值语法是很可能在ECMAScript 6中出现

Javascript不允许使用"default"说明符。

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

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
    }
}

您提供的代码将无法在Chrome中运行

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

  • MDN:默认参数。
  • ES2015规范:默认值参数初始化器

在我看来,使用ES2015特性的最佳方式是将资源与Browserify或WebPack捆绑在一起,并使用Babel将ES2015转换为ES5。这样你就不用担心ES2015浏览器兼容性图表了。第一次开始是很痛苦的,但是值得。

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

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

默认值为undefined, true == undefined =>false,所以你的默认值将是false:)