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

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

问题描述:

mmorning,我是一个PHP的人,所以我不能明白这是为什么抛出一个错误:从功能添加默认值在JavaScript中的自定义函数

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 =假”。

谁能告诉我我应该在这里写什么。问候,菲尔

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' }); 
} 
+0

这几乎是解决方案/我来到后的第一篇文章(没有这个例子),所以我必须接受作为答案,谢谢大家游戏答案都做这项工作。 – 2011-01-28 05:20:27

你不能提供默认值的javascript函数参数,但你可以让它们不确定,然后在函数的开始分配一个默认值。

例如:

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

    //Rest of function 
} 

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

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

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相比很方便,因为它允许调用者明确要求默认值,但它不易于像简单的falsy比较那样重写0''(空字符串)。

尝试

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

您无法将函数声明的参数部分内声明的默认值。相反,申报默认你的函数声明应该是这样的:

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

因此,如果remove_wrap定义它会留等于本身,但如果它是不确定的,将被设置为false。

因为你是一个PHP的人,这可能会派上用场。从JS我自己来,我竟然搞砸了几次,假设这是在语言:

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

在PHP中“或”运算符将返回“真”如果第一个值或第二的值是true ,否则“错误”。

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

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

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

arg = arg || default; 

所以,你的情况应该是:

remove_wrap = remove_wrap || false; 

但是,如果你的默认值是false,你甚至都不需要设置它。因为,这样的说法缺乏时,它的价值将在函数内部undefined类型和值已经是“falsy”:你可以直接使用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" 
    }); 
} 

奖励: 注意我还为error变量添加了一个var变量(除非您的真实意图是创建全局变量,否则不要忽略该变量)。我也用三元表达缩短了任务。我还用大多数人发现更具可读性的语法重新调整了fancybox调用的格式。