【问题标题】:Javascript function with default not required values具有默认非必需值的 Javascript 函数
【发布时间】:2012-03-21 16:46:48
【问题描述】:

我找不到类似的问题,我想这是因为我找不到正确的问题/答案。 我想创建一个函数,如果在调用函数时没有传递参数,则该函数将使用默认值,如果是这样,请将默认值替换为函数参数中传递的值。 例如:

function openBlock(false){
  // if parameter was passed with 'false' value, it will do this

  // else it will put automatically a 'true' value to an function's argument
}

所以如果调用一个没有任何参数的函数openBlock(),它会默认认为它是参数true。如果我调用带有参数false 的函数,例如openBlock(false),它将覆盖默认行为。

谢谢

【问题讨论】:

    标签: javascript function if-statement arguments


    【解决方案1】:

    在 Javascript 中有多种方法可以做到这一点,尽管没有内置方法。最简单的模式是:

    function(option) {
        option = option || "default";
        // do stuff
    }
    

    但正如@FelixKling 所指出的,这在您的情况下不起作用,因为它将用默认值替换任何 false-y 值(包括将参数显式设置为 false)。对于您希望默认为 true 的布尔参数,您需要:

    function(option) {
        // default to "true"
        option = option !== undefined ? option : true;
        // do stuff
    }
    

    当您处理多个参数或两个参数时,最好的选择通常是使用单个 optionsconfig 参数并检查属性是否存在:

    function(options) {
        var arg1 = option.arg1 !== undefined ? false : true;
        var arg2 = option.arg2 || "default";
        // do stuff
    }
    

    如果您使用 jQuery 或 underscore 之类的库,extend 方法可以很容易地使用默认值设置对象,然后使用提供的值(如果存在)覆盖它们:

    function(options) {
        var defaults = {
            arg1: true,
            arg2: "default"
        };
        options _.extend(defaults, options);
        // do stuff
    }
    

    【讨论】:

    • @FelixKling - 是的,已更新。我通常在应该将 false-y 值替换为默认值而不是布尔值的情况下使用此模式。
    • 非常感谢,我想这正是我所要求的,现在就去看看
    【解决方案2】:

    JavaScript 并不像其他语言那样真正实现默认参数。

    您必须自己实现它们:

    function openBlock(argument) {
      argument = typeof argument !== 'undefined';
    }
    

    查看Is there a better way to do optional function parameters in Javascript? 以获得更通用的方法。

    【讨论】:

    • openBlock(true) 将与带有此代码的 openBlock(false) 相同。
    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多