添加默认值在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' });
}
你不能提供默认值的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
调用的格式。
这几乎是解决方案/我来到后的第一篇文章(没有这个例子),所以我必须接受作为答案,谢谢大家游戏答案都做这项工作。 – 2011-01-28 05:20:27