我正在尝试创建一个具有多个可选参数的函数。然后我试图只分配第二个参数而不必分配第一个参数。
function foo(bar, zar) {
bar = bar || 5;
zar = zar || 2;
return bar * zar;
}
foo() //10
foo(7) //14
foo(7, 3) //21
foo(zar=5) //10 <-- why is this not 25?
这样做的最佳方式是什么?
答案 0 :(得分:2)
恕我直言,处理这种情况的最简单方法是使用参数的对象,通过ES6语法使用默认字段值。
function foo({ bar = 5, zar = 2 } = {}) {
console.log(bar * zar);
}
foo() //10
foo({ bar: 7 }) //14
foo({ bar: 7, zar: 3 }) //21
foo({ zar: 5 }) //25
供参考,请参阅:Default parameters和Object destructuring。
答案 1 :(得分:0)
您可以将undefined
传递给您想要用作默认值的任何参数。
foo(undefined, 5);
另外,如果你可以自由使用ES6,你可以稍微简化你的功能并声明你的可选参数:
function foo(bar = 5, zar = 2) { }
答案 2 :(得分:-1)
使用void 0
代替您不想提供的参数。
例如:
foo(void 0,zar=5);
任何未填充的参数都是undefined
。
如果不传递第一个参数,则无法传递第二个参数,但可以传递undefined
。
在该函数中,您可以检查undefine
d并替换为默认值。
或者,您可以使用object参数来模仿关键字参数。