如何测试是否为函数提供了参数?

时间:2012-10-22 20:50:17

标签: javascript function

我想知道,你能用可选参数创建一个函数。

示例:

function parameterTest(test)
{
   if exists(test)
   {
     alert('the parameter exists...');
   }
   else
   {
     alert('The parameter doesn\'t exist...');
   }
}

因此,如果您致电parameterTest(),那么结果将是一条消息“参数不存在......”。如果你打电话给parameterTest(true),那么它将返回“参数存在...”。

这可能吗?

9 个答案:

答案 0 :(得分:70)

这是一种非常频繁的模式。

您可以使用

进行测试
function parameterTest(bool) {
  if (bool !== undefined) {

然后,您可以使用以下其中一种形式调用您的函数:

 parameterTest();
 parameterTest(someValue);

小心不要经常出现测试错误

if (!bool) {

因为您无法将未提供的值与false0""区分开来。

答案 1 :(得分:10)

function parameterTest(bool)
{
   if(typeof bool !== 'undefined')
   {
     alert('the parameter exists...');
   }
   else
   {
     alert('The parameter doesn\'t exist...');
   }
}

答案 2 :(得分:7)

在JavaScript中,如果您忽略提供参数,则默认为undefined

您可以在浏览器控制台中或使用JSFiddle轻松地自行尝试。

如您所说,您可以检查参数是否存在,然后编写可以使用参数的函数。但是,JavaScript Garden(一个很好的资源)建议在大多数其他情况下远离typeof,因为它的输出几乎没用(请查看results of typeof的表格。)

答案 3 :(得分:4)

检查的最佳方式: param 是否未定义

function parameterTest(param) {
    if (param !== undefined)
    ...

param 也可以是变量或函数名称

答案 4 :(得分:1)

function parameterTest(p) {
    if ( p === undefined)
        alert('The parameter doesn\'t exist...');
    else
        alert('the parameter exists...');
}

答案 5 :(得分:1)

ModelChain是真的

null == undefined

代码示例:

if (arg == null){
    // arg was not passed.
}
var button = document.querySelector("button");

function myFunction(arg){
  if(arg == null){
    alert("argument was not passed.");
  } else {
    alert("argument " + arg + " was passed.");
  }
}

答案 6 :(得分:1)

初始化默认值(如果不存在)

function loadDialog(fn, f, local, anim) {
  switch (arguments.length) {  
    case 1: f=null;
    case 2: local=false;
    case 3: anim=false;
  }
  ...
}

答案 7 :(得分:0)

这些答案都不是为我做的。我需要知道是否有人使用过这个参数。如果有人调用传递 undefined 的函数,我想将其视为他们使用该值作为参数。无论如何,使用一些现代 JS 的解决方案非常简单:

function parameterTest(...test) {
  if (test.length) {
    return `exists`;
  } else {
    return `not exists`;
  }
}

parameterTest(123);         // exists
parameterTest(undefined);   // exists
parameterTest();            // not exists
parameterTest(window.blah); // exists

对于较旧的浏览器,您可以使用参数:

function parameterTest() {
  if (arguments.length) {
    return "exists";
  } else {
    return "not exists";
  }
}

答案 8 :(得分:-1)

I know this is old, but this is my preferred way to check, and assign default values to functions:

function testParamFunction(param1, param2) {
    param1 = typeof param1 === 'undefined' ? null : param1;
    param2 = typeof param2 === 'undefined' ? 'default' : param2;

    // exit if the required parameter is not passed
    if (param1 === null) {
        console.error('Required parameter was not passed');
        return;
    }

    // param2 is not mandatory and is assigned a default value so 
    // things continue as long as param1 has a value
}