1

引数をチェックするこれらの2つの方法の違いは何ですか?

function foo(a, b) {
    this.a=a;
    this.b=b;
}

使用:

if (arguments.length === 1) {}

また

if (this.b !== undefined) {}
4

3 に答える 3

1

どのような用語でチェックしますか?関数はデフォルト値/動作で続行できますか、それとも何かが見落とされた場合は停止する必要がありますか?

通常、デフォルトの動作ですが、それは関数の目的/使用法によって異なります。

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...
}
于 2012-04-24T12:39:43.623 に答える
1

必須の引数を確認したい場合は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
}

より複雑なケースには、必要な引数、オプション、デフォルト値など、このすべてをチェックするユーティリティ関数がいくつかあります。

于 2012-04-24T13:00:06.537 に答える
0

b!==undefinedおそらくあなたが望むものです

foo()またはf(1,2,3)を実行すると、最初のものは失敗します

于 2012-04-24T12:38:50.410 に答える