0

我们正在使用自定义日期时间选择器,到目前为止必须返回日期和时间。但现在条件发生了变化,有时我只需要返回日期,所以我决定添加一个可选参数。现在脚本是这样的:

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 中使用可选参数的例子我还没有看到这样的东西。在 JavaScript 中做这种事情的正确方法是什么?

4

3 回答 3

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";
}
于 2013-06-17T11:21:41.033 回答
1

你有几个选择,你已经发现了typeof。如果除非跳过,否则数据不会是的,您可以使用逻辑 OR ||、三元条件运算符 a?b:cif带有逻辑 NOT的 an来检查是否设置它。
您还可以选择与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则可以vard 或设置为参数,因此具有非undefined的值。

如果您对此不满意,请选择使用void运算符而不是 undefined。
如果您了解它可能会发生并且不必担心有人阴影undefined,请随意使用它。
如果你看到有人这样做,问问他们是否也可以为你做var Array或类似的事情,这样他们就会意识到他们很傻。

于 2013-06-17T11:23:31.637 回答
1

另一种方法是使用匿名对象作为单个参数:

function viewCalendar(opts) {
    if (opts.dateOnly) {
       date_format = "dd/mm/yyyy";
    }
}

viewCalendar({parent:foo, destField:bar, dateOnly:true})

当您有很多可选参数时特别有用。

于 2013-06-17T11:26:38.190 回答