如何为JavaScript函数的参数设置默认值并使用较少的参数调用它?

时间:2011-12-28 09:50:24

标签: javascript

我有一个功能

function test(name)
{

}

我用test("kanishka");

来称呼它

在一种情况下,我想将两个参数(nameage)传递给此函数:

test("kanishka",27);

在PHP中,我可以通过将默认值设置为age来完成此操作:

test(name , age = NULL)

JavaScript中有没有办法做到这一点?

我试过

test(name , age = NULL) 

但它会出错。

我可以声明2个函数

test(name) and  test(name , age = NULL)

但它重复了代码。

或者我可以更改之前的函数调用,它将一个参数带到两个参数,为age提供默认值:

test("kanishka" , 0)

但在这种情况下,我必须找到所有函数调用并更改它们。

6 个答案:

答案 0 :(得分:8)

只需更改功能定义即可

test(name, age)
{

}

该功能的所有现有用途都将age分配给undefined值..

每当您使用第二个参数时,它都会被分配到age参数。

如果您想要默认值,请将功能更改为

test(name, age)
{
    age = (age === undefined) ? 0 : age; // change 0 to the default value you want..
}

答案 1 :(得分:4)

基本上你会做这样的事情

function foo(a, b)
 {
   a = typeof(a) != 'undefined' ? a : 42;
   b = typeof(b) != 'undefined' ? b : 'default_b';
   ...
 }

答案 2 :(得分:1)

即使您传递了错误数量的参数,您仍然可以调用该方法。 “optional”参数将设置为undefined,您可以使用if语句检查。

答案 3 :(得分:1)

您可以使用arguments对象来保存传递给函数的所有参数 - 无论它们是否被定义......

test(name){
    var age = arguments[1] == undefined ? 0 : arguments[1]
    // do stuff here
}

答案 4 :(得分:1)

您可以使用2个参数声明该函数:

function test(name, age) {
   //...
}
test("James"); //age will be undefined
test("James", 22); //age will be 22

或者您可以完全忘记参数并使用arguments对象:

function test() {
    console.log(arguments[0]);
}

通过这种方式,您可以传入任意数量的参数,并通过arguments对象访问它们。

答案 5 :(得分:0)

为方法提供默认值的“标准”方法是检查方法体的开头是否提供了参数:

function test(name, age)
{
  age = typeof(age) != 'undefined' ? age : NULL;
  ...
}