es6中的引數預設值

tao892509844發表於2018-07-13
本文並無乾貨,只是讓自己加深對這些基礎知識的瞭解

在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


相關文章