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

いくつかの選択肢があり、すでに発見していますtypeof。スキップしない限りデータが偽にならない場合は、論理 OR ||、三項条件演算子 a?b:c、または論理 NOTifを使用して、設定するかどうかを確認できます。また、 undefinedまたは と比較することもできます。引数としてundefined自体を渡すことを除いて、パラメーターがfalsyであると予想される場合でも、どちらも機能します。
void 0

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は、グローバル スコープで書き込み可能であり、すべてのブラウザーで、グローバル スコープ内にない場合は、d またはパラメーターundefinedとして設定できるため、値がundefinedではないことに注意してください。var

voidそれが気に入らない場合は、未定義よりも演算子を使用することを選択してください。
それが起こる可能性があり、誰かがシャドウイングすることを心配する必要がないことを理解している場合はundefined、気軽に使用してください。誰かがそれをしているのを見たことがあれば、彼らがあなたのために配列
を作成 できるかどうか、または同様のことを彼らに尋ねて、彼らがばかげたことに気付くようにしてください。var

于 2013-06-17T11:23:31.637 に答える
1

もう 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 に答える