在ECMAScript 5中熙宇,并沒有提供在函數(shù)的參數(shù)列表中指定參數(shù)默認(rèn)值的語法朦乏。
想要為函數(shù)參數(shù)指定默認(rèn)值找颓,可以使用如下方法實(shí)現(xiàn)
function makeRedirect(url, timeout) {
url = url || "/home"
timeout = timeout || 2000
// 函數(shù)其余部分
}
- 在這個(gè)示例中岳颇,url和timeout是可選參數(shù)照捡,如果不傳入對(duì)應(yīng)的參數(shù)值,它們也會(huì)被賦予一個(gè)默認(rèn)值话侧。
- 但是這種方法仍有個(gè)缺陷栗精,如果傳入的值為0,盡管它是個(gè)合法值瞻鹏,也不會(huì)被生效
這種情況下悲立,可以使用這種更安全的做法
function makeRedirect(url, timeout) {
url = (typeof url != "undefined") ? url : "/home"
timeout = (typeof timeout != "undefined") ? timeout : 2000
// 函數(shù)其余部分
}
- 盡管這種做法更為安全,但是需要額外寫很多復(fù)雜的代碼邏輯新博。
在ECMAScript 6中薪夕,提供了一種更簡單的方式,代碼如下
function makeRedirect(url = "/home", timeout = 2000) {
// 函數(shù)其余部分
}
此外赫悄,與Java原献、C++等語言要求的不同,在ECMAScript 6中不要求具有默認(rèn)值的參數(shù)只能在函數(shù)參數(shù)列表的最右邊埂淮。
具體代碼如下
function makeRedirect(url = "/home", timeout = 2000, callback) {
// 函數(shù)其余部分
}
// 傳參形式
// 使用url和timeout的默認(rèn)值
makeRedirect()
// 使用url和timeout的默認(rèn)值
makeRedirect(undefined, undefined, function() {})
// 使用timeout的默認(rèn)值
makeRedirect("/login")
// 使用null指定不使用timeout的默認(rèn)值
makeRedirect("/login", null, function() {})