Javascript函数,默认不是必需值

时间:2012-03-21 16:46:48

标签: javascript function if-statement arguments

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

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),它将覆盖默认行为。

由于

2 个答案:

答案 0 :(得分:2)

JavaScript并没有像其他语言那样实现默认参数。

你必须自己实施它们:

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

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

答案 1 :(得分:2)

有许多方法可以在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或下划线等库,extend方法可以很容易地设置一个具有默认值的对象,然后用提供的值覆盖它们,如果它们存在:

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