Javascript: использование только определенного параметра в функции

#javascript #function-parameter

#javascript #функция-параметр

Вопрос:

Я думаю, что это скорее вопрос для начинающих: как я могу обратиться к определенному параметру в функции и игнорировать остальные?

Пример:

http://jsfiddle.net/8QuWj/

 function test(para_1, para_2, para_3) {
   if (para_3 == true) {
    alert('only the third parameter was successfully set!');
   }
}

test(para_3=true);
  

Я хочу индивидуально решить, использую ли я определенный параметр в функции или нет.

Комментарии:

1. Передайте хэш-карту в функцию

Ответ №1:

Вы можете проверить каждый параметр отдельно, используя if(param) , например:

 function test(para_1, para_2, para_3) {
    if (para_1) {
        // First parameter set
    }
    if (para_2) {
        // Second parameter set
    }
    if (para_3) {
        // Third parameter set
    }
}
  

Вообще говоря, вы не можете задать только один параметр и ожидать, что он будет третьим, потому что он автоматически установит его равным первому, а остальные 2 — как undefined . Итак, если вы хотите вызвать свою функцию и у вас есть только третий набор, скорее всего, вы бы сделали

 test(null, null, 'this_is_set');
  

Ответ №2:

В JavaScript невозможно передавать именованные аргументы. Лучшее, что вы можете сделать, это принять объект в качестве отдельного параметра, и оттуда вы решаете, какие свойства устанавливать.

 function test(obj) {
   if (obj.para_3 == true) {
    alert('only the third parameter was successfully set!');
   }
}

test({para_3:true});
  

Комментарии:

1. Это неверно; вы можете утверждать, что параметр не равен undefined.

2. @JimmyBreck-McKye какая часть неверна? Я думаю, что этот ответ лучше всего соответствует тому, что ищет OP.

3. @Segfault — Операционная система хочет определить, был ли передан параметр ‘para3’. Scimonster говорит, что это невозможно, но это так — вы можете проверить, не определен ли para3 === . Хотя подход с использованием аргумента map является более гибким и более читаемым для нескольких необязательных параметров, он, как следует из ответа, не является единственным вариантом, предоставляемым языком.

4. @JimmyBreck-McKye Я немного изменил свой ответ.

Ответ №3:

Вы также можете применить аргументы, хранящиеся в массиве. Элементы массива аргументов будут сопоставлены параметрам функции.

 var arg = [];
arg[2] = true;
test.apply(this, arg);
  

другой способ — просто установить для других параметров значение undefined:

 test(undefined, undefined, true);
  

http://jsfiddle.net/8QuWj/2/