我创建了一个这样的函数:
function saveItem(andClose = false) {
}
它在 Firefox 中运行良好
在 IE 中,它在控制台上给出了这个错误:
Expected ')'
在 Chrome 中,它会在控制台中出现此错误:
Uncaught SyntaxError: Unexpected token =
两个浏览器都将错误来源标记为函数创建行。
我创建了一个这样的函数:
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 提出了Default parameters。所以上面的内容可以改为:
function setName(name = 'Bob') {}
这不是有效的 ECMAScript 语法,但对于 Mozilla 添加到语言实现中的功能超集来说,这是有效的语法。
ECMAScript 6 中可能会出现默认参数分配语法。
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
}
}
您提供的代码不会在 Chrome < 49 版中运行:https : //kangax.github.io/compat-table/es6/#test-default_function_parameters
您使用了有效的 ECMAScript 2015 语法:
在我看来,使用 ES2015 特性的最好方法是将资产与Browserify或WebPack捆绑在一起,并有一个步骤是使用Babel将 ES2015 转编译为 ES5。这样你就不必担心 ES2015 浏览器兼容性图表。第一次开始很痛苦,但值得。
在您的情况下,您有另一种选择来确保您的变量是布尔值:
function saveItem(andClose) {
andClose = true == andClose;
// ...
}
默认值为undefined
, 和true == undefined
=> false
,因此您的默认值为false
:)