使用if(!num)在javascript中测试typeof

时间:2012-12-12 18:16:25

标签: javascript typeof

我正在编写一个函数,需要测试传递的参数是否为数字。我是新手,所以我写了这样的东西:

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

我为了同样的目的看了别人的代码,他们就是这样的:

if (!num) {
    return false;
}

我发现这令人困惑。如果零被传递给函数,那么!num的评估为真吗?第二块代码如何可靠地测试num参数的类型?

4 个答案:

答案 0 :(得分:3)

  

“如果将零传递给函数,那么!num不会评估为真吗?”

是的,如果NaN或任何虚假的非数字值。

  

“第二块代码如何稳健地测试num参数的类型?”

没有。它只测试价值的“虚假”。每个falsey值都会为true语句提供if结果。

这些值是:

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

任何其他值都将失败if条件。

(当然,如果你不用!来否定价值,那么所有这些都会被颠倒过来)

答案 1 :(得分:0)

您可以使用以下功能:isNaN(value)

答案 2 :(得分:0)

你是对的第二句话没有正确验证输入是否是数字。你不妨改进一下这样检查:

  

if((typeof(num)!==“number)||(isNaN(num)||(!isFinite(num){

     
    return false;  
         

}

  

答案 3 :(得分:0)

您是正确的,这不是有效的代码行。 Here Is Test 正确的代码是:

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

This ANSWER

中所述