默认功能参数

时间:2019-04-01 10:01:40

标签: javascript ecmascript-6

嗨,我不得不承认,尽管我已经使用了很多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)唯一可行的方法吗?还是还有其他更聪明的方法?

4 个答案:

答案 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)

您可以将默认参数设置为第一个,然后spreadrest。这样做的好处之一是,您现在不仅限于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)