嗨,我不得不承认,尽管我已经使用了很多ES6语法,但我仍然掌握了许多语法。
例如,我了解您可以执行console.log(multiply(5))
以获得
function multiply(a, b = 1) {
return a * b;
}
但是可以说你有
function multiply(a, b = 1, c) {
return a * b * c;
}
很明显,您无法执行(console.log(multiply(5,,5))
。在这种情况下,重新排列函数中的参数位置以使其成为function multiply(a, c, b = 1)
唯一可行的方法吗?还是还有其他更聪明的方法?
答案 0 :(得分:6)
您可以传递undefined
以使用默认值:
function multiply(a, b = 1, c) {
return a * b * c;
}
multiply(2, undefined, 3); // 6
您可以阅读有关默认参数值的信息,并查看更多示例at MDN
答案 1 :(得分:5)
另一个选择是传递带有默认属性分配的单个对象,而不是多个单独的参数:
function multiply({ a, b = 1, c }) {
return a * b * c;
}
console.log(multiply({
a: 3,
b: 4,
c: 5
}));
console.log(multiply({
a: 3,
c: 5
}));
答案 2 :(得分:2)
您可以将默认参数设置为第一个,然后spread和rest。这样做的好处之一是,您现在不仅限于3个数字;
function multiply(a = 1, ...args) {
args = [a, ...args];
return args.reduce((x, y) => x * y);
}
console.log(multiply(5));
console.log(multiply(5, 10, 15, 20, 25));
答案 3 :(得分:1)
不幸的是,JS不支持在函数参数上使用省略号(跳过),因此您不能简单地编写
f(1,,2)
,并期望第二个参数为默认值。您可以改用数组省略:
function f(a, b = 99, c) {
console.log(a, b, c)
}
f(...[1,,2])
不确定这是否值得。
就像@Dave Marshall提到的那样,它是传递undefined
的最直接的方式,我会以一种更具可读性的形式使用它,从而可以清楚地省略哪个参数:
function f(a, b = 99, c) {
console.log(a, b, c)
}
f(1, void 'b', 2)