2016-11-24 93 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