3

我在 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 中是否可行?

4

5 回答 5

6

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

您要完成的工作可能是执行以下操作:

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

我强烈建议您检查undefined不是依赖||运营商。我花了几个小时调试做出这种假设的代码,但在通过0或另一个错误值时失败了。JavaScript 类型系统可能会变得非常棘手,例如"0"是 falsy。

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

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

不过,这在 IE8 中不像第一个版本那样工作。

于 2013-03-08T00:24:39.810 回答
3

是的,这是可能的。如果未传递参数,则会得到一个特殊值“未定义”。以下对我有用:

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

}

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

undefined
null
0
"" (empty string)
false

因此,如果这些值对您很重要,您将需要显式测试未定义而不是上面使用的笼统“如果不是假”测试。

于 2013-03-08T00:24:18.073 回答
3

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

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

    return a + b;
}
于 2013-03-08T00:24:27.913 回答
2

未定义的参数评估为 false,因此您可以在函数 foo 的开头执行以下操作:

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

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

于 2013-03-08T00:24:57.397 回答
2

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

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

通过测试“未定义”,您还可以接受评估为假的参数(如nullor""0or false

于 2013-03-08T00:27:01.677 回答