本文並無乾貨,只是讓自己加深對這些基礎知識的瞭解
在es6前我們是這樣給方法定義預設引數的
function fun(x, y) {
y = y || true;
}複製程式碼
但是這樣做會有一個弊端,假如我們第二個引數為false或者為空字串則y就會等於true。所以還得判斷一下
function fun(x, y) {
if(typeof y === 'undefined'){
y = true
}
}複製程式碼
在es6中是這樣處理預設值的
function fun(x, y=true) {
}複製程式碼
很明顯這樣更簡潔,而且可以讓程式碼變得更清晰,讓閱讀程式碼的人知道哪些引數是可以省略的。
引數預設值可以與解構賦值的預設值,結合起來使用。
function a({x, y = true}) {
console.log(x, y);
}
a({}) //undefined true
a({y:false}) //undefined false複製程式碼
如果呼叫函式a時沒有傳任何引數就會報錯,因此我們可以給它指定預設引數
function a({x, y = true} = {}) {
console.log(x, y);
}
foo() // undefined true複製程式碼
通常情況下,定義了預設值的引數,應該放在靠後的位置。舉個例子
function a(x=0,y){
console.log(x,y)
}
a(4)//4,undefined
a(undefined,1)//0,1複製程式碼
上面的程式碼預設值的引數沒有放在後面。我們可以發現無法省略該引數,除非傳undefined
。