2017-03-16 8 views
1

引数が定義されていないかどうかに基づいて、異なるステートメントを返す必要があります。問題は、2番目のパラメータがないと言うと、3番目の引数は2番目の引数になり、WHICH引数がなくても、最後のelse if文だけがヒットします(最後の引数がない場合にのみ適用されます)。 )。私は研究したが解決策を見つけることができない。私はJavascript - 特定の 'index'の関数の引数がないかどうかを確認する方法

var array=Array.prototype.slice.call(arguments); 

を使用し、配列[0]、配列[1]と、配列をチェックしてみました[2]が、私はいつも「Cのdoesntが存在GET」として すべてのヘルプは次のようになり、それはまた、動作しません。感謝。呼び出し側が2つのだけの引数を使って関数を呼び出す場合

function testing(a, b, c) { 
     if (a === undefined) { 
      return 'a doesnt exist' 
     } else if (b === undefined) { 
      return 'b doesnt exist' 
     } else if (c === undefined) { 
      return 'c doesnt exist' 
     } 
    } 

    testing(3, 'name') 

答えて

4

ありがとう、あなたはそれはあなたが期待している種類の中からそれを推測することができない限り、欠けている第二または第三のパラメータのかどうかわかりません。たとえば、あなたが期待する場合bは、関数であるように番号とcを可能にする:

if (typeof b === "function") { 
    // `b` was omitted (effectively) 
    c = b; 
    b = undefined; 
} 

しかし、あなたはbcの引数の同じタイプを期待している、またはあなたは、任意のタイプを許可している場合2つの引数を指定している呼び出し元がabまたはacを供給することを意味するかどうかを知る方法はありません。その場合

が、あなたは(事実上)bをオフのままにしたい場合、あなたはそれのためにundefined提供する必要があると言って機能文書化する必要があると思います:testing(1, undefined, 3);を(そして、それは、ES2015のデフォルト引数とうまく演じてやって、 。いない)

もう一つの方法は、引数の複雑な組み合わせを受け入れることはない全くそれを残し、一方、それは離散のparamsではなく、オブジェクトを受け入れます:

function testing(options) { 
 
    console.log("a:", options.a); 
 
    console.log("b:", options.b); 
 
    console.log("c:", options.c); 
 
} 
 

 
// Usage 
 
testing({a: 1, c: 3});

これを実行し、ES2015(別名「ES6」)機能を使用できる場合(たとえば、最先端のブラウザのみを対象としている、または蒸散している場合など)は、引数の破棄を〜それらは自動的にあなたのためのパラメータにマッピングされます:

function testing({a, b, c}) { 
 
    console.log("a:", a); 
 
    console.log("b:", b); 
 
    console.log("c:", c); 
 
} 
 

 
// Usage 
 
testing({a: 1, c: 3});

あなたも、デフォルトのパラメータ値であることを組み合わせることができます

function testing({a = 1, b = 2, c = 3}) { 
 
    console.log("a:", a); 
 
    console.log("b:", b); 
 
    console.log("c:", c); 
 
} 
 

 
// Usage 
 
testing({a: 1, c: 3});

0

それとも、あなたは、すべての3つの引数を使用して機能を呼び出すことを確認してください例:

testing(3, undefined, 'name'); 
関連する問題