在JavaScript中使用可选参数

时间:2011-11-11 14:03:34

标签: javascript optional-parameters

我创建了一个这样的函数:

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 null

有什么问题?

6 个答案:

答案 0 :(得分:1)

您正在传递实际的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;
  ...
}

答案 1 :(得分:1)

您将对象作为第三个参数传递(多个),您的allowedExtensions是第四个。

您还要检查带有“Uploader”的变量作为名称后缀。它们不是你传递的变量。

接下来,如果您将{ allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'zip'] }作为第四个参数传递以获取包含扩展名的数组,则必须编写allowedExtensions.allowedExtensions

答案 2 :(得分:1)

首先,您的变量不为空,它们未定义,您需要使用===运算符进行检查。 undefined和null不相同,JavaScript中具有声明但未初始化的变量具有undefined值。 使用===运算符,您可以使用JavaScript检查您要比较的类型和值。如果您只使用==运算符,JavaScript将尝试键入转换您的变量:

if (allowedExtensionsUploader == null)

进入这个:

if (false == false)

可能会导致问题。

其次,你只为你的函数提供三个参数,但你要问的是第四个参数。

第三,第四个参数叫做 allowedExtensions ,但是你正在检查一个名为 allowedExtensionsUploader 的变量。

第四,我认为您应该使用jslint来检查您的代码。它会告诉你很多我刚刚写的东西=)

答案 3 :(得分:0)

由于您将其作为参数multiple传递,因为它是第三个参数

在JavaScript中,您无法使用命名参数。

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

对象是否具有属性allowedExtensions初始化为数组。

答案 4 :(得分:0)

  1. 您的参数与if语句中的变量不匹配。
  2. 您应该检查变量是undefined,而不是null
  3. 您应该使用===,而不是==
  4. 请改用:

    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']);
    

答案 5 :(得分:0)

你在函数调用

中只传递了三个参数

参数

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

是一个JSON对象,可在“多个”变量

中使用

尝试在函数调用中再添加一个参数,您将获得该值作为第4个参数“allowedExtensions”

相关问题