带有默认参数的ES6:是否传入参数

P-R*_*RAD 4 javascript default-parameters ecmascript-6

function myfunc( value1, value2='defaultValue' ) {
  //some stuff
}
Run Code Online (Sandbox Code Playgroud)

如果参数传入或不传入函数,我怎么知道呢?我知道如果你没有传递任何东西作为参数,将设置默认值.我实际上想要检查用户是否作为第二个参数传递任何东西(即使它与默认值相同)并更改我的返回相应的价值.

我正在检查ES6文档这个SO答案,不是我真正想要的.

谢谢,

T.J*_*der 10

arguments仍代表您发送的实际参数,因此arguments.length会向您提供该信息.

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

在兼容的JavaScript引擎上,输出

value1 foo
value2 defaultValue
length 1

arguments但是,不会在箭头功能中工作,并且estus发布了一个很好的替代方案.


Est*_*ask 5

对于复杂的参数处理,rest参数可能是有益的,也可以弃用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");
Run Code Online (Sandbox Code Playgroud)

手动参数解析对于使用直观的默认方法的情况特别有用,即,当传递的参数应该替换默认值时,即使它是undefined:

function myfunc(...args) {
  const defaultArgs = ['defaultValue1', 'defaultValue2'];
  let [value1, value2] = Object.assign(defaultArgs, args);
  ...
}
Run Code Online (Sandbox Code Playgroud)