3

渡された引数が数値であるかどうかをテストする必要がある関数を書いています。私は初心者なので、次のように書きました。

if (typeof num !== "number") {
    return false;
}

私は同じ目的で他の誰かのコードを見ました、そして彼らはちょうどこのようなものを持っていました:

if (!num) {
    return false;
}

これは紛らわしいと思います。関数にゼロが渡された場合、!numはtrueと評価されませんか?この2番目のコードチャンクは、num引数の型をどのように堅牢にテストしますか?

4

4 に答える 4

3

「関数にゼロが渡された場合、!numtrueと評価されませんか?」

はい、そうです。またNaN、数値以外の値が含まれている場合もあります。

num「この2番目のコードチャンクは、引数のタイプをどのように堅牢にテストしますか?」

そうではありません。値の「偽り」のみをテストします。すべての偽の値は、ステートメントにtrue結果を与えます。if

それらの値は次のとおりです。

  • false
  • ""
  • 0
  • NaN
  • null
  • undefined

他の値はif条件に失敗します。

(もちろん、値をで否定しない場合、これはすべて逆になります!

于 2012-12-12T18:17:29.213 に答える
0

次の関数を使用できます: isNaN(value)

于 2012-12-12T18:23:44.213 に答える
0

入力が数値であるかどうかにかかわらず、2 番目のステートメントが適切に検証されないことについては正しいです。次のようにチェックを改善することもできます。

if ((typeof(num) !== "数値) || (isNaN(num) || (!isFinite(num) {

    return false;  

}

于 2012-12-12T18:24:11.177 に答える
0

あなたは正しいコード行ではありません。ここにテストの 正しいコードは次のようになります。

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

この回答で説明されているように

于 2012-12-12T18:27:39.070 に答える