我们正在使用自定义日期时间选择器,到目前为止必须返回日期和时间。但现在条件已经改变,有时我只需要返回日期,所以我决定添加一个可选参数。现在脚本是这样的:
var date_format = "dd/mm/yyyy HH:MM:ss";
function viewCalendar(parent, destField, dateOnly) {
if (typeof dateOnly !== "undefined") {
date_format = "dd/mm/yyyy";
}
//more code...
但即使它似乎有效(我只做了几次尝试)我不太喜欢这个,但也许是因为我不习惯JavaScript的方式。如果不是因为一些示例代码,我会做类似的事情:
var date_format = "dd/mm/yyyy HH:MM:ss";
var dateOnly = true;
function viewCalendar(parent, destField, dateOnly) {
if (typeof dateOnly != true) {
date_format = "dd/mm/yyyy";
}
但是我看到在JS中使用optinal参数的几个例子我没有看到类似的东西。在JavaScript中做这种事情的正确方法是什么?
答案 0 :(得分:1)
我可能会在这里找到三元运营商
date_format = dateOnly ? "dd/mm/yyyy" : date_format ;
它会查找dateOnly
的真实性,并覆盖格式或保留格式
另外
if (typeof dateOnly != true) {
date_format = "dd/mm/yyyy";
}
似乎错了,可能是
if (dateOnly == true) {
date_format = "dd/mm/yyyy";
}
答案 1 :(得分:1)
您有几个选择,您已经发现typeof
。如果数据不会被 falsy 除非被跳过,您可以使用logical OR ||
,三元conditional operator a?b:c
或if
logical NOT检查是否设置
您还可以选择与 undefined 或void 0
进行比较,即使参数预期为 falsy ,这两者仍然有效,但传递 undefined 本身作为参数。
function foo(op0, op1, op2, op3, op4, op5, op6) {
// if with logical NOT
if (!op0) op0 = 'default0';
// logical OR
op1 || (op1 = 'default1');
op2 = op2 || 'default2';
// ternary
op3 = op3 ? op3 : 'default3';
// compare, below this line with falsy args too (except explicit `undefined`)
if (op4 === undefined) op4 = 'default4';
if (op5 === void 0) op5 = 'default5';
// compare combined with logical OR
(op6 !== undefined) || (op6 = 'default6');
// log parameters to see what we have now
console.log(op0, op1, op2, op3, op4, op5, op6)
}
foo(); // default0 default1 default2 default3 default4 default5 default6
请注意,在较旧的浏览器中,undefined
在全局范围内可写,而在所有浏览器中,如果您不在全球范围内,undefined
可以是var
d或设置为参数,因此其值不是未定义。
如果您对此不满意,请选择使用void
运算符而不是undefined
如果您了解它可能发生并且不必担心有人遮蔽undefined
,请随意使用它。
如果你看到有人这样做,请问他们是否可以为你var
数组或类似的东西,所以他们意识到他们是愚蠢的。
答案 2 :(得分:1)
另一种方法是使用匿名对象作为单个参数:
function viewCalendar(opts) {
if (opts.dateOnly) {
date_format = "dd/mm/yyyy";
}
}
viewCalendar({parent:foo, destField:bar, dateOnly:true})
当你有很多可选参数时特别有用。