在javascript函数中处理无参数

时间:2013-03-08 00:21:09

标签: javascript internet-explorer-8 jquery-1.7

我在javascript方面经验不多,但在其他编程语言中,可以使用以下方法为函数中的缺失参数设置默认值。

例如,假设我有一个功能

function foo(a , b)
  return a + b 
{

我希望能够使用1个参数或2个参数调用上述函数

一个参数案例:

foo(2)   //a =2 and b would be automatically set to a default no argument value,

两个参数案例:

foo(1,2)  // a = 1 , b = 2 => 3

这是否可以在兼容IE 8或使用Jquery 1.7.2的javascript中使用?

5 个答案:

答案 0 :(得分:6)

JavaScript函数允许您使用比指定的参数更少的参数来调用它们。

您正在尝试完成的工作可能会执行以下操作:

function foo(a , b){
  if(typeof b === "undefined"){
      b=3;
  }
  return a + b; 
}
foo(5);//return 3;

我强烈建议您检查undefined依赖||运算符。我花了好几个小时调试代码,这些代码在传递0或其他假值时做出了这个假设并失败了。 JavaScript类型系统可能非常棘手,例如"0"是假的。

ECMAScript Harmony(下一个版本)允许使用以下语法的其他语言中的默认参数

function foo(a , b=3){
  return a + b;
}

这在IE8中不像第一个版本那样有用。

答案 1 :(得分:3)

是的,这是可能的。如果未传递参数,则会获得特殊值“undefined”。以下适用于我:

function foo(a, b) {
  a = a || defaultForA;
  b = b || defaultForB;

}

由于Javascript处理转换为布尔值的方式,以下代码片段中的以下内容都将被视为未定义:

undefined
null
0
"" (empty string)
false

因此,如果这些值对您很重要,则需要明确测试undefined而不是上面使用的一揽子“if not false”测试。

答案 2 :(得分:3)

不,但您可以使用三元运算符或if语句手动模拟此效果(只需确保检查undefined!):

function foo(a, b) {
    b = (typeof b === "undefined") ? 2 : b;

    return a + b;
}

答案 3 :(得分:2)

未定义的参数的计算结果为false,因此您可以在函数foo的开始中执行类似的操作:

a = a || 0;
b = b || 0;

这样,如果a或b存在,它们将使用自己的值进行评估,否则为0。

答案 4 :(得分:2)

您可以测试是否收到参数:

function foo(a, b) {
  if(typeof b === "undefined") {b = 2;}
}

通过测试" undefined"您还可以接受评估为false的参数(例如null""0false