2016-11-24 79 views
3
function myfunc(value1, value2='defaultValue') { 
    //some stuff 
} 

如何知道如果參數傳入或不傳入函數。我知道默認值將被設置,如果你沒有傳入任何參數。我實際上是想檢查用戶是否傳遞任何東西作爲第二個參數(即使它與默認值相同)並更改我的返回值相應的價值。具有默認參數的ES6:參數是否被傳入

我被檢查出ES6 docsthis SO answer,真的沒有什麼,我期待的。

感謝,

回答

10

arguments仍然代表你發送的實際參數,所以arguments.length會給你的信息。

function myfunc(value1, value2='defaultValue') { 
 
    console.log("value1", value1); 
 
    console.log("value2", value2); 
 
    console.log("length", arguments.length); 
 
} 
 
myfunc("foo");

在一個標準的JavaScript引擎,輸出

 
value1 foo 
value2 defaultValue 
length 1 

arguments不會箭頭功能工作,雖然和estus發佈a good alternative that does

4

對於複雜的參數處理其餘參數可以是有益的,也不贊成arguments.length

function myfunc(...args) { 
 
    let [value1, value2 = 'defaultValue'] = args; 
 

 
    console.log("value1", value1); 
 
    console.log("value2", value2); 
 
    console.log("args.length", args.length); 
 
} 
 
myfunc("foo");

手冊參數解析爲與直觀的方法爲缺省值,即,通過當參數中的情況下是特別有用應取代默認值,即使它是undefined

function myfunc(...args) { 
    const defaultArgs = ['defaultValue1', 'defaultValue2']; 
    let [value1, value2] = Object.assign(defaultArgs, args); 
    ... 
} 
+0

優秀的選擇,並且具有在箭頭函數中工作的優勢('arguments'不會)。 –

+1

這是正確的,箭頭和常規函數之間的不一致是選擇公分母(休息)的很好理由。爲了讓事情變得更糟,'arguments'是延遲​​動作炸彈,它將在傳輸代碼和一些本地實現中以箭頭形式工作,但會在其他本地實現中破解。 – estus