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很烂,但开发者除了支持“非”浏览器之外别无选择不应使用code>,因为如果name设置为假值,将使用默认值而不是name,而不是name=name | | |“Bob”
usename=(name==未定义)?“”:姓名代码>@juco我不明白“你不能这么做”-Mozilla MDN说我们可以?你是说你不能在IE中实现,还是说Mozilla文档不准确?这里是Android stock browser 5.1.1,同样的问题。一个小的调整是删除var声明,因为和close
变量已经分配在这个范围内,如果你真的想确定它是布尔值,而不是字符串“true”,将其更改为andClose=true==andClose代码>