Javascript函数和默认参数,不适用于IE和Chrome

Tal*_*lon 86 javascript jquery

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

function saveItem(andClose = false) {

}
Run Code Online (Sandbox Code Playgroud)

它在Firefox中运行良好

在IE中,它在控制台上出现此错误: Expected ')'

在Chrome中,它会在控制台中出现此错误: Uncaught SyntaxError: Unexpected token =

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

juc*_*uco 125

你做不到这一点,但你可以这样做:

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}
Run Code Online (Sandbox Code Playgroud)

这通常缩短为:

function setName(name) {
  name = name || 'Bob';
}
Run Code Online (Sandbox Code Playgroud)

更新

以上情况适用于ECMAScript <= 5.ES6提出了默认参数.所以上面可以改为:

function setName(name = 'Bob') {}
Run Code Online (Sandbox Code Playgroud)

  • 这对于IE11及以下版本非常有用,它不会实现ES6并且会打破默认参数. (11认同)
  • 而不是```name = name || 'Bob'```使用```name =(name === undefined)?'':名字;``` (7认同)
  • `name = name || 'Bob';`不应该被使用,因为如果name设置为falsey值,将使用默认值而不是name (3认同)
  • 谢谢!!不知道那个!IE很糟糕,但开发人员除了支持"非"浏览器之外别无选择. (2认同)

the*_*tem 11

这不是一个有效的ECMAScript语法,但它是Mozilla在其语言实现中添加的功能超集的有效语法.

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


JRo*_*ero 7

Javascript不允许使用"默认"说明符.

做你想要的快速方法是改变:

function saveItem(andClose = false) {

}
Run Code Online (Sandbox Code Playgroud)

以下内容:

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
    }
}
Run Code Online (Sandbox Code Playgroud)