引数をチェックするこれらの2つの方法の違いは何ですか?
function foo(a, b) {
this.a=a;
this.b=b;
}
使用:
if (arguments.length === 1) {}
また
if (this.b !== undefined) {}
引数をチェックするこれらの2つの方法の違いは何ですか?
function foo(a, b) {
this.a=a;
this.b=b;
}
使用:
if (arguments.length === 1) {}
また
if (this.b !== undefined) {}
どのような用語でチェックしますか?関数はデフォルト値/動作で続行できますか、それとも何かが見落とされた場合は停止する必要がありますか?
通常、デフォルトの動作ですが、それは関数の目的/使用法によって異なります。
function foo(a,b){
a = a || {};
b = b || 5;
// continue
}
存在しないものを探している場合は、次のことを確認undefined
して停止できます。
function foo(a){
if (a === undefined){
return false;
}
}
要するに、変数が存在しないか、誤って割り当てられた場合に、関数をどのように進めるかは完全にあなた次第です。別の例:
function bar(b){
if (typeof b !== 'function'){
b = function(){};
}
// continue on...
}
必須の引数を確認したい場合はarguments.length
、最初のステップとして使用します。オプションの引数を確認する場合、通常、パターンは次のとおりです。
function foo(a,b){
this.a = a || "foo";
// etc
}
これは、パラメーターが「偽の」値(つまり、空の文字列、ゼロ、null、未定義、false、NaN)にできない場合にのみ機能することに注意してください。たとえば、a
パラメータとして空の文字列を渡すと、fooが作成されます。パラメータをオプションと見なすための値としてのみ考慮したい場合undefined
は、次のようなことを行う必要があります。
function foo(a){
this.a = a === undefined ? "foo" : a;
// etc
}
nullと未定義のオプションのパラメーターの両方を検討する場合は、次のようにすることができます。
function foo(a){
this.a = a == undefined ? "foo" : a;
// etc
}
もちろん、演算子を使用することもできますtypeof
。たとえばa
、文字列のみにすることができます。
function foo(a) {
this.a = typeof a === "string" ? a : "";
// etc
}
常に文字列になるように強制a
することもできます。最悪のシナリオでは、指定された非文字列値の文字列バージョンになります(同様に未定義)。
function foo(a) {
this.a = String(a);
// etc
}
より複雑なケースには、必要な引数、オプション、デフォルト値など、このすべてをチェックするユーティリティ関数がいくつかあります。
b!==undefined
おそらくあなたが望むものです
foo()またはf(1,2,3)を実行すると、最初のものは失敗します