Передаваемые параметры в функцию

Есть функция, которая принимает три параметра и просто выводит их. Если не введен третий параметр, то я могу его прописать как дефолтное значение сразу в функцию. А как я могу проверить если пропущен первый или второй параметр? Т.к если я передам два параметра, (к примеру b,c),то функция считает, что я ввел a,b, и параметр с выдает как undefined(ну или дефолтное значение.)

function myFunc(a, b, c='X') {
    return console.log(a, b, c)
}

myFunc(1, 3)
myFunc(1, 2, 3)

Ответы (3 шт):

Автор решения: vsemozhebuty

Если у всех параметров один тип данных, тогда только путём превращения позиционных параметров в ключи объекта-параметра. Если типы данных разные, можно сравнивать типы и определять параметры по ним. Так обычно определяют необязательные параметры в середине, в таких, например, сигнатурах:

https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback

→ Ссылка
Автор решения: Igor

Никак. Вы не можете "пропустить" первый параметр и передать второй.

function myFunc(options) {
  options = Object.assign({a: defaultA, b: defaultB, c: defaultC}, options);
  ...
}

myFunc({ a: 1, c: 3 });
→ Ссылка
Автор решения: Aziz Umarov

Оберните все в объект и сделайте так на случай если же все таки вы не отправили какой то параметр, и вам не нужно значение по умолчанию, и не важен порядок параметров

function myFunc(args) {

  let a= Object.getOwnPropertyDescriptor(args, "a");
  if (a != null) {
    console.log("a = ", a.value);
  }

  let b = Object.getOwnPropertyDescriptor(args, "b");
  if (b != null) {
    console.log("b = ", b.value);
  }

  let c = Object.getOwnPropertyDescriptor(args, "c");
  if (c != null) {
    console.log("c = ", c.value);
  }
}

myFunc({c: "test" , a: 1});
myFunc({b: "test 2" , a: 1});
myFunc({a: "test 3" , b: 1, c: 3});

отсюда видно на сколько нужно изменить вызов функции чтоб получить запрашиваемый результат в вопросе

→ Ссылка