在ECMAScript 5中,并没有提供在函数的参数列表中指定参数默认值的语法。
想要为函数参数指定默认值,可以使用如下方法实现
function makeRedirect(url, timeout) {
url = url || "/home"
timeout = timeout || 2000
// 函数其余部分
}
- 在这个示例中,url和timeout是可选参数,如果不传入对应的参数值,它们也会被赋予一个默认值。
- 但是这种方法仍有个缺陷,如果传入的值为0,尽管它是个合法值,也不会被生效
这种情况下,可以使用这种更安全的做法
function makeRedirect(url, timeout) {
url = (typeof url != "undefined") ? url : "/home"
timeout = (typeof timeout != "undefined") ? timeout : 2000
// 函数其余部分
}
- 尽管这种做法更为安全,但是需要额外写很多复杂的代码逻辑。
在ECMAScript 6中,提供了一种更简单的方式,代码如下
function makeRedirect(url = "/home", timeout = 2000) {
// 函数其余部分
}
此外,与Java、C++等语言要求的不同,在ECMAScript 6中不要求具有默认值的参数只能在函数参数列表的最右边。
具体代码如下
function makeRedirect(url = "/home", timeout = 2000, callback) {
// 函数其余部分
}
// 传参形式
// 使用url和timeout的默认值
makeRedirect()
// 使用url和timeout的默认值
makeRedirect(undefined, undefined, function() {})
// 使用timeout的默认值
makeRedirect("/login")
// 使用null指定不使用timeout的默认值
makeRedirect("/login", null, function() {})