我创建了一个这样的函数:
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
:)