Параметры функции по умолчанию - PullRequest
4 голосов
/ 01 апреля 2019

Привет, я должен признать, что я все еще использую многие синтаксисы 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 ]

6 голосов
/ 01 апреля 2019

Вы можете передать undefined, чтобы использовать значения по умолчанию:

function multiply(a, b = 1, c) {
  return a * b * c;
}

multiply(2, undefined, 3); // 6

Вы можете прочитать о значениях параметров по умолчанию и увидеть больше примеров в MDN

5 голосов
/ 01 апреля 2019

Другой вариант - передать отдельный объект с назначением свойства по умолчанию вместо нескольких отдельных аргументов:

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 голосов
/ 01 апреля 2019

Вы можете установить в качестве параметра по умолчанию первый, а затем распространение 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));
1 голос
/ 01 апреля 2019

К сожалению, JS не поддерживает исключения (пропуски) для аргументов функции, поэтому вы не можете просто написать

f(1,,2)

и ожидать, что 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...