在javascript自定义函数中添加默认值

时间:2011-01-28 05:08:28

标签: javascript function

mmorning,我是一个php人,所以我不明白为什么这会引发错误:

function display_message( bool, msg, remove_wrap = false ) {
    if( bool === true ) {
        error = get_msg( msg, remove_wrap );
    }else{
        error = get_error_msg( msg, remove_wrap );
    }
    $.fancybox( error, { 'autoDimensions' : false, 'width' : 450, 'height' : 'auto', 'transitionIn' : 'none', 'transitionOut' : 'none' });
}

罪魁祸首是该函数的'remove_wrap = false'。

任何人都可以告诉我应该在这里写些什么。问候,菲尔

7 个答案:

答案 0 :(得分:4)

JavaScript不支持这样的参数默认值。像许多其他人所说的那样,你可以在你的功能中选择一个默认值。设置默认值的简明成语是:

arg = arg || default;

所以,在你的情况下,它将是:

remove_wrap = remove_wrap || false;

但是,如果您的默认值为false,则甚至无需进行设置。因为,当缺少该参数时,其值将在函数内部为undefined类型,并且该值已经是“麻痹”:您可以直接使用remove_wrap

function display_message(bool, msg, remove_wrap) {
    var error = bool
        ? get_msg(msg, remove_wrap)
        : get_error_msg(msg, remove_wrap);

    $.fancybox(error, {
        autoDimensions: false,
        width: 450,
        height: "auto",
        transitionIn: "none",
        transitionOut: "none"
    });
}

<强>加成: 请注意,我还在var变量中添加了error(除非您的真实意图是创建全局变量,否则不要省略var)。我还用三元表达式缩短了作业。我还使用大多数人认为更具可读性的语法重新格式化了fancybox调用。

答案 1 :(得分:3)

因为你是一个PHP人,所以这可能会派上用场。来自JS自己,我实际上搞砸了几次,假设这是用语言:

function (some_var) {
    some_var = some_var || 'default';
}

在PHP中,如果第一个值或第二个值为true,则“or”运算符将返回“true”,否则返回“false”。

但是在JavaScript中,“或”运算符实际上会返回第一个值本身,如果它是真的。 如果两个值都是假的,它只返回false如果两个值都是假的,那么它返回第二个值。这意味着上面的值是超级高效的分配默认值的方式。

如果这是所有旧知识,我最诚挚的道歉。我只是希望有人在我切换语言时走过 me

答案 2 :(得分:2)

function display_message( bool, msg, remove_wrap ) {
    remove_wrap = remove_wrap === true;
    if( bool === true ) {
        error = get_msg( msg, remove_wrap );
    }else{
        error = get_error_msg( msg, remove_wrap );
    }
    $.fancybox( error, { 'autoDimensions' : false, 'width' : 450, 'height' : 'auto', 'transitionIn' : 'none', 'transitionOut' : 'none' });
}

答案 3 :(得分:1)

您无法为javascript函数参数提供默认值,但您可以将它们保留为未定义,然后在函数开头指定默认值。

例如:

function display_message( bool, msg, remove_wrap ) { 
    if(undefined === remove_wrap) 
        remove_wrap = false;

    //Rest of function
}

像这样调用此函数:display_message(true, "my msg");

答案 4 :(得分:1)

您可以像这样处理默认值:

function display_message(bool, msg, remove_wrap) {
    if (remove_wrap == null) remove_wrap = false;
    // rest of your code...

}

如果使用以下任一方式调用函数,则将应用默认值:

display_message(some_bool, some_msg);
// Or,
display_message(some_bool, some_msg, null);

null相比是很方便的,因为它允许调用者明确要求默认值,但它不容易覆盖0''(空字符串),如简单的比较会。

答案 5 :(得分:1)

function display_message( bool, msg, remove_wrap) {
  if(remove_wrap === undefined) {
    var remove_wrap = false;
  }
...

答案 6 :(得分:1)

您不能在函数声明的参数部分中声明默认值。相反,要声明默认值,您的函数声明应如下所示:

function display_message( bool, msg, remove_wrap ) {
  remove_wrap = remove_wrap || false;
  // rest of code
}

因此,如果定义了remove_wrap,它将保持与自身相等,但如果未定义,则将其设置为false。