【问题标题】:Can you declare facultative function arguments in Javascript?你能在 Javascript 中声明兼性函数参数吗?
【发布时间】:2010-11-29 18:28:17
【问题描述】:

就像你可以在 php 中一样

<?php
function whatever($var='') {

}
?>

你能用 javascript 做到这一点吗?

【问题讨论】:

    标签: php javascript function default-value


    【解决方案1】:

    如果你想为你的参数设置一个“默认”值,你可以这样做:

    function whatever(arg1) {
      arg1 = arg1 || 'default value';
    }
    

    请记住,如果 arg1 包含任何 falsy 值,例如 nullundefined0falseNaN 或一个长度为零的字符串""

    在 JavaScript 函数中你也有 arguments 对象,它是一个类似数组的对象,包含传递给函数的参数,因此你甚至可以声明一个没有输入参数的函数,当你调用它时,你可以传递一些它:

    function whatever() {
      var arg1 = arguments[0];
    }
    
    whatever('foo'); 
    

    编辑:仅当它真正未定义时才设置默认值,如@bobbymcr cmets,你也可以这样做:

    function whatever(arg1) {
      arg1 = arg1 === undefined ? 'default value' : arg1;
    }
    

    【讨论】:

    • 查看我的答案,了解如何仅在真正未定义的情况下设置默认值。
    • @kangax:哦,是的,我错过了 NaN...现在添加它... :)
    【解决方案2】:

    在 javascript 中,您可以调用函数而不管参数。

    换句话说,这样声明一个函数是完全合法的:

     function func(par1, par3) {
    
       //do something
      }
    

    然后这样称呼它:

     func();
    

    【讨论】:

    • 这是“是的,你可以设置默认值”,还是“不,你不能设置默认值”?
    • 我措辞错误,我的意思是你可以添加参数而不必定义它们。答案是肯定的,你可以。与 PHP 不同。
    【解决方案3】:

    我不认为你可以直接做到这一点,但有办法做到这一点。由于 JavaScript 允许您在函数调用中省略参数,因此您可以检查参数是否未定义,如果是,则给它一个默认值:

    function DoSomething(x, y, z)
    {
        // set default values...
    
        if (typeof x == "undefined")
        {
            x = 5;
        }
    
        if (typeof y == "undefined")
        {
            y = "Hi";
        }
    
        if (typeof z == "undefined")
        {
            z = 3.14;
        }
    
        // ...
    }
    

    您可以尝试通过以下方式调用它,以查看缺少参数时分配的默认值:

    DoSomething();
    DoSomething(4);
    DoSomething(4, "X");
    DoSomething(4, "X", 7.77);
    

    【讨论】:

    • 就我而言,我更喜欢 x === undefined;为了避免 typeof :)
    【解决方案4】:

    在 JS 中默认参数不是必需的。对于 $arg = '' 实现,您可以使用

    function whatever(vars) {  
       vars = vars || 'default';  
       /* your code */    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2010-12-24
      • 2011-11-24
      • 2023-03-12
      相关资源
      最近更新 更多