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'。
任何人都可以告诉我应该在这里写些什么。问候,菲尔
答案 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。