Передаваемые параметры в функцию
Есть функция, которая принимает три параметра и просто выводит их. Если не введен третий параметр, то я могу его прописать как дефолтное значение сразу в функцию. А как я могу проверить если пропущен первый или второй параметр? Т.к если я передам два параметра, (к примеру 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 шт):
Если у всех параметров один тип данных, тогда только путём превращения позиционных параметров в ключи объекта-параметра. Если типы данных разные, можно сравнивать типы и определять параметры по ним. Так обычно определяют необязательные параметры в середине, в таких, например, сигнатурах:
https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback
Никак. Вы не можете "пропустить" первый параметр и передать второй.
function myFunc(options) {
options = Object.assign({a: defaultA, b: defaultB, c: defaultC}, options);
...
}
myFunc({ a: 1, c: 3 });
Оберните все в объект и сделайте так на случай если же все таки вы не отправили какой то параметр, и вам не нужно значение по умолчанию, и не важен порядок параметров
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});
отсюда видно на сколько нужно изменить вызов функции чтоб получить запрашиваемый результат в вопросе