JavaScriptでオプションのパラメーターをスキップする素敵な方法を教えてください。
たとえば、すべてのopt_
パラメータは次のとおりです。
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
溶液:
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 でこれがどのように行われるかを見てください。
最も安全な賭けは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コードを記述し続けると、従来のif (aParam) {...}
とは対照的に、undefined
のパラメーター値を明示的にチェックする関数が呼び出される可能性が高まります。両方がnull
に強制的に変換されるという理由だけで、undefined
とfalse
を互換的に使用し続けると、不安定な状態になります。
ただし、パラメータが実際に省略されたかどうかを関数が知ることが実際に可能であることに注意してください(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
}
_
脚注
undefined
も_"number"
_型ではありませんが、実際には型ではない型になることが全体の仕事です。それが、初期化されていない変数によって想定される値であり、関数のデフォルトの戻り値である理由です。パラメーター値としてnull
を渡すだけです。
追加:最後に実際の値を渡したいと思われるオプションパラメータをスキップすることもできます(この場合、opt_timeoutInterval
パラメータ)