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

Javascript函数和默认参数,不适用于IE和Chrome,javascript,jquery,Javascript,Jquery,我创建了如下函数: function saveItem(andClose = false) { } 它在Firefox中运行良好 在IE中,它在控制台上给出以下错误: Expected')” 在Chrome中,它在控制台中给出以下错误: 未捕获的语法错误:意外标记= 两种浏览器都将错误源标记为函数创建行。这不是有效的ECMAScript语法,但它是Mozilla添加到语言实现中的功能超集的有效语法 默认参数分配语法可能出现在ECMAScript 6中。您不能执行此操作,但可以执行以下操作:

我创建了如下函数:

function saveItem(andClose = false) {

}
它在Firefox中运行良好

在IE中,它在控制台上给出以下错误:
Expected')”

在Chrome中,它在控制台中给出以下错误:
未捕获的语法错误:意外标记=


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

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


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

您不能执行此操作,但可以执行以下操作:

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}
function setName(name) {
  name = name || 'Bob';
}
这通常被缩短为以下内容:

function saveItem(andClose) {
   if(andClose === undefined) {
      andClose = false;
   }
}
function setName(name) {
  name = name || 'Bob';
}
更新


对于ECMAScriptJavascript不允许使用“默认”说明符的情况,上述情况是正确的

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

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<49版:

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


在我看来,使用ES2015功能的最佳方式是将资产与或捆绑在一起,并使用一个步骤将ES2015编译为ES5。这样,您就不必担心ES2015浏览器兼容性图表。第一次开始是一件痛苦的事情,但值得一试。

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

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

默认值是
undefined
,并且
true==undefined
=>
false
,因此您的默认值将是
false
:)

好的,那么在Javascript函数中设置默认值的最佳方法是什么呢?@Talon:最佳方法取决于您的情况。如果您知道参数不会是错误的,您可以执行默认值。或者您可以检查
参数
对象的
.length
。或者,您可以简单地测试
未定义的
的每个参数。每种情况都有不同的使用方法。它会将
和关闭
设置为false,因为它是0。。。不完全是我期望它做的…@gdoron看到了:这些是你需要学习的关于你使用的任何语言的怪癖。另一个选择是将第三行更改为
var和close=andClose==undefined?false:andClose
这将使您能够将
0
传递给函数,并且不会将其替换为
false
。这对于IE11及以下版本非常有用,IE11及以下版本不实现ES6,并且会中断默认参数。谢谢!!我不知道!IE很烂,但开发者除了支持“非”浏览器之外别无选择,因为如果name设置为假值,将使用默认值而不是name,而不是
name=name | | |“Bob”
use
name=(name==未定义)?“”:姓名@juco我不明白“你不能这么做”-Mozilla MDN说我们可以?你是说你不能在IE中实现,还是说Mozilla文档不准确?这里是Android stock browser 5.1.1,同样的问题。一个小的调整是删除var声明,因为
和close
变量已经分配在这个范围内,如果你真的想确定它是布尔值,而不是字符串“true”,将其更改为
andClose=true==andClose