Работа с необязательными аргументами в JavaScript - PullRequest
0 голосов
/ 11 ноября 2011

Я создал такую ​​функцию:

window.SetUploader = function(action, elementID, multiple, allowedExtensions) {
    //Optional arguments
    if (actionUploader == null) {
      actionUploader = "/Upload";
    }
    if (elementIDUploader == null) {
      elementIDUploader = "file-uploader";
    }
    if (multipleUploader == null) {
      multipleUploader = false;
    }
    if (allowedExtensions == null) {
      allowedExtensions = [];
    }

    //Function
     .....
};

Чтобы вызвать эту функцию, используйте следующий код:

SetUploader('/Projects/ImageUpload', 'Logo', { allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'zip'] });

Обратите внимание на параметр allowedExtensions, он не меняетзначение.

Функция отладки, allowedExtensions значение ноль .

Что не так?

Ответы [ 6 ]

1 голос
/ 11 ноября 2011

Прежде всего, ваши переменные не равны NULL, они не определены, и вам нужно проверить с помощью оператора ===.undefined и null не совпадают, переменные в JavaScript, которые имеют объявленные, но не инициализированные, имеют значение undefined.С помощью оператора === вы заставляете JavaScript проверять тип и сравниваемые значения.Если вы используете только оператор ==, JavaScript попытается преобразовать ваши переменные следующим образом:

if (allowedExtensionsUploader == null)

в следующее:

if (false == false)

, что может привести к проблемам.

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

В-третьих, четвертый аргумент называется allowExtensions , но вы проверяете переменную с именем allowExtensionsUploader .

В-четвертых, я думаю, что вы должны использовать jslint для проверки вашего кода.Было бы много чего рассказать о том, что я только что написал =)

1 голос
/ 11 ноября 2011

Вы передаете свой объект в качестве третьего параметра (как кратного), ваш allowExtensions является четвертым.

Также вы проверяете переменные с «Uploader» в качестве суффикса имени.Они не являются переменными, которые вы передаете.

Далее, если вы передадите { allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'zip'] } в качестве четвертого параметра, чтобы получить массив с расширениями, вы должны будете написать allowedExtensions.allowedExtensions

1 голос
/ 11 ноября 2011

Вы передаете свой фактический параметр allowedExtendsions в качестве третьего аргумента, в котором появляется формальный параметр multiple. Поставьте undefined перед ним.

SetUploader(
   /* action */    '/Projects/ImageUpload', 
   /* elementId */ 'Logo', 
   // NEED VALUE FOR MULTIPLE HERE
   ['jpg', 'jpeg', 'png', 'gif', 'zip'])

Вы также никогда не используете параметр action, вместо этого проверяете и устанавливаете глобальную переменную actionUploader.

Обычно при разрешении необязательных аргументов у вас есть один конкретный аргумент, который представляет собой карту дополнительных аргументов.

function (requiredParam, anotherRequiredParam, extra) {
  var optionalParam = extra ? extra.optionalParamName : defaultValue;
  ...
}
0 голосов
/ 11 ноября 2011

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

параметр

{ allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'zip'] }

- это объект JSON, который будет доступен в «множественной» переменной

Попробуйте добавить еще один аргумент в вызове функции, вы получите это значение в качестве 4-го параметра "allowExtensions"

0 голосов
/ 11 ноября 2011
  1. Ваши аргументы не соответствуют вашим переменным в выражениях if.
  2. Вы должны проверить, являются ли переменные undefined, а не null.
  3. Вы должны использовать ===, а не ==.

Используйте это вместо:

window.SetUploader = function(actionUploader, elementIDUploader, multipleUploader, allowedExtensionsUploader) {
    //Optional arguments
    if (actionUploader === undefined) {
      actionUploader = "/Upload";
    }
    if (elementIDUploader === undefined) {
      elementIDUploader = "file-uploader";
    }
    if (multipleUploader === undefined) {
      multipleUploader = false;
    }
    if (allowedExtensionsUploader === undefined) {
      allowedExtensionsUploader = [];
    }
};

SetUploader('/Projects/ImageUpload', 'Logo', undefined, ['jpg', 'jpeg', 'png', 'gif', 'zip']);
0 голосов
/ 11 ноября 2011

Так как вы передаете его как параметр multiple, так как это третий параметр .

В JavaScript вы не можете иметь именованные параметры.

 { allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'zip'] }

Является ли объект, который имеет свойство allowedExtensions init для массива.

...