5

ここで関数の例を見てください:

function a(b){
    console.log(b != null ? 1 : 2);
}

このコードは、パラメーターを渡す場合は1を出力し、渡さない場合は2を出力することで、正常に機能します。

ただし、JSLintは警告を表示し、代わりに厳密な等式を使用するように指示します!==。パラメータが渡されたかどうかに関係なく、関数はを使用すると1を出力し!==ます。

だから私の質問は、パラメータが渡されたかどうかを確認するための最良の方法は何ですか?使用したくないarguments.length、または実際にはargumentsオブジェクトをまったく使用しません。

私はこれを使ってみました:

function a(b){
    console.log(typeof(b) !== "undefined" ? 1 : 2);
}

^それはうまくいったようですが、それは最良の方法ですか?

4

2 に答える 2

5

引数が渡されない場合、bundefined、ではなく、nullです。したがって、引数の存在をテストする適切な方法bは次のとおりです。

function a(b){
    console.log(b !== undefined ? 1 : 2);
}

!==を使用するとnullとundefinedを等しくするように強制できるため、をお勧めしますが、==またはを!=使用!==する===と型強制が行われないため、厳密にそうであるかどうかを判断できますundefined

于 2012-08-12T21:16:48.530 に答える
2

undefined(渡されなかったパラメータは実際undefinedにはそうではなくnull)の偽の性質を使用して、次のように書くことができます。

(!b)?1:2

ただし、これは、、および(偽の値)にも0当てはまりnullます""

あなたがそれを防弾の方法で書きたいなら、あなたは行くことができます:

typeof(b) === "undefined"
// or thanks to the write protection for undefined in html5
b === undefined

更新:EcmaScript 2015のおかげで、デフォルトのパラメーターを使用できるようになりました:

function a(b = 1){
    console.log(b);
}

パラメータが未定義の場合(省略または明示的に渡された場合(ここではnull代わりに使用する必要があります))、デフォルト値が使用され、他のすべての値は変更されません(偽の値も)。デモンストレーション

于 2012-08-12T21:01:57.030 に答える