2012-04-24 5 views
1

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

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

使用:

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

または

if (this.b !== undefined) {} 
+0

を行い、いくつかのユーティリティ関数を持っている、あなたがしたいんそれをチェック...私は必要はないと思うo関数に何が入るのかを知っているときに引数をチェックする...関数に渡される引数の数が不明な場合は、引数に対してチェックする方が良い –

答えて

1

必須の引数をチェックする場合は、最初の手順としてarguments.lengthを使用します。あなたはオプションの引数を確認したい場合は、通常のパターンは以下のとおりです。パラメータは「falsy」の値(未定義のヌルので、空の文字列、ゼロ、、、偽、できない場合にのみ、これが機能することを

function foo(a,b){ 
    this.a = a || "foo"; 
    // etc 
} 

お知らせNaN)。たとえば、空の文字列をaパラメータとして渡すと、fooが返されます。あなたはnullとundefinedとオプションパラメータの両方を考慮したい場合

function foo(a){ 
    this.a = a === undefined ? "foo" : a; 
    // etc 
} 

は、あなたが持つことができます:あなたは、パラメータを考慮に値としてのみundefinedを検討したい場合は、オプションの、あなたのような何かをしなければならない

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 
} 

より複雑な例は、どのような理由などあなたは引数が必要と言ったあなたのためのすべては、このチェック、オプションで、デフォルト値、

0

b!==undefinedあなたがfoo()またはfをすれば

は最初のものは失敗します何をしたい可能性が高いです(1 、2,3)

1

どのような条件でチェックしますか?機能はデフォルト値/ bahaviorで進めることができますか、何かが見逃された場合に停止する必要がありますか?

一般的にあなたのデフォルトの動作が、それは機能の目的/用途に依存する:

function foo(a){ 
    if (a === undefined){ 
    return false; 
    } 
} 

function foo(a,b){ 
    a = a || {}; 
    b = b || 5; 
    // continue 
} 

は、あなたが不在の何かを探しているなら、あなたはundefinedと停止を確認することができます

要するに、それは完全にあなた次第であり、不在または間違って割り当てられた変数を指定して関数を続行する方法です。別の例:

function bar(b){ 
    if (typeof b !== 'function'){ 
    b = function(){}; 
    } 
    // continue on... 
} 
関連する問題