【问题标题】:How to set default values for parameters of a JavaScript function and call it with less parameters?如何为 JavaScript 函数的参数设置默认值并用更少的参数调用它?
【发布时间】:2011-12-28 09:50:23
【问题描述】:

我有一个功能

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)

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

【问题讨论】:

  • 这个问题与jQuery无关,只是关于JavaScript。
  • 关于我可以声明2个函数:不,你不能JavaScript不支持函数重载。如果你声明了两个同名的函数,后者会覆盖前者。
  • @Felix Kling。哦,我的错误,非常感谢你............
  • “我可以声明 2 个函数” - 不能使用相同的名称和范围。你可以给他们不同的名字。 “但它重复了代码” - 不一定,您可以将所有代码与两个参数一起放入函数中,然后另一个函数将使用第二个参数的默认值简单地调用它。但是,您根本不需要这样做,请参阅下面的答案。

标签: javascript


【解决方案1】:

只要改变函数的定义就可以了

test(name, age)
{

}

该函数的所有现有用途都将分配给age 一个undefined 值..

每当您使用第二个参数时,它将被分配给age 参数。

如果您想要一个默认值,请将函数更改为

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

【讨论】:

    【解决方案2】:

    基本上你会做这样的事情

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您可以使用 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】:

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

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

        【讨论】:

        • 什么是NULL?它将是undefined
        • 最好检查undefined,好像arguments[1] 设置为false 检查会失败
        • 所有优秀的 cmets - 我已经编辑了我的答案 - 现在看起来更好了吗?
        【解决方案6】:

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

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

        【讨论】:

        • 什么是NULL?它将是undefined
        • NULL 在原始问题中被引用。我假设他们已经定义了它的含义。
        • 我认为在问题中 OP 已经尝试了 PHP 中的工作,因为 NULL 是 PHP 中的一个特殊值。但很公平,我明白你的意思。
        猜你喜欢
        • 2010-10-28
        • 2013-01-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多