74

JavaScriptでオプションのパラメータをスキップする良い方法を教えてください。

たとえば、opt_ここですべてのパラメータを破棄したいと思います。

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
4

3 に答える 3

135

解決:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})

スキップするオプションのパラメーターの代わりに使用する必要がundefinedあります。これは、JavaScriptのオプションのパラメーターのデフォルト値を100%シミュレートするためです。

小さな例:

myfunc(param);

//is equivalent to

myfunc(param, undefined, undefined, undefined);

強力な推奨事項:パラメーターが多数ある場合はJSONを使用し、パラメーターリストの中央にオプションのパラメーターを含めることができます。これがjQueryでどのように行われるかを見てください。

于 2011-12-02T13:22:48.687 に答える
31

短い答え

最も安全な賭けはundefinedであり、ほぼ遍在的に機能するはずです。ただし、最終的には、呼び出されている関数をだまして、パラメーターを本当に省略したと思い込ませることはできません。

短いという理由だけで使用することに傾倒していることに気付いた場合は、次の略記として名前がnull付けられた変数を宣言することを検討してください。_undefined

(function() { // First line of every script file
    "use strict";
    var _ = undefined; // For shorthand
    // ...
    aFunction(a, _, c);
    // ...
})(); // Last line of every script

詳細

まず、次のことを知ってください。

  • typeof undefinedに評価します"undefined"
  • typeof nullに評価します"object"

したがって、関数が型であると想定する引数をとるとします"number"。値として提供する場合nullは、それにを与えています"object"。セマンティクスはオフです。1

開発者がますます堅牢なjavascriptコードを書き続けるにつれて、呼び出す関数がundefined、クラシックとは対照的に、パラメーターの値を明示的にチェックする可能性が高くなりますif (aParam) {...}。両方がたまたま強制されたという理由だけで、とnull互換的に使用し続けると、不安定な状況になります。undefinedfalse

ただし、実際には、関数がパラメーターが実際に省略されたかどうかを判断できることに注意してください(に設定されているのではなくundefined)。

f(undefined); // Second param omitted
function f(a, b) {
    // Both a and b will evaluate to undefined when used in an expression
    console.log(a); // undefined
    console.log(b); // undefined
    // But...
    console.log("0" in arguments); // true
    console.log("1" in arguments); // false
}

脚注

  1. また、タイプではありませんが、実際にはタイプではないundefinedタイプ"number"になることが全体の仕事です。これが、初期化されていない変数によって想定される値であり、関数のデフォルトの戻り値である理由です。
于 2012-08-02T17:56:01.900 に答える
4

nullパラメータ値として渡すだけです。

追加:実際の値を渡したい最後の後に続くすべてのオプションのパラメーターをスキップすることもできます(この場合、opt_timeoutIntervalパラメーターをすべてスキップできます)

于 2011-12-02T12:19:52.713 に答える