【问题标题】:JavaScript - Check if a variable is a number : typeof doesnt work, isNaN doesJavaScript - 检查变量是否为数字:typeof 不起作用,isNaN 起作用
【发布时间】:2014-02-20 07:48:34
【问题描述】:

我目前面临一个问题,可能很简单,但我在研究中一无所获...

我想检查(在 JavaScript 中)一个变量是一个数字,以及它是大于 100 还是小于 0。

我试过这个:

if ((returnValue > 100) || (returnValue < 0) || (typeof returnValue != 'number')) { 
    //not correct
} else {
 // let's do some stuff here
}

但它不起作用......当我输入例如数字 50(这很好)时,发生在“if”而不是“else”中,正如预期的那样!

所以我做到了:

if ((returnValue > 100) || (returnValue < 0) || (isNaN(returnValue)))

然后我注意到它非常有效!

我也知道我可以将它分成两部分,首先测试变量是否为数字,然后测试它是否大于 100 或小于 0,但这不是我目前正在寻找的 ;)

您能否解释一下为什么第一次尝试不起作用(和/或使它起作用)?

谢谢!

【问题讨论】:

  • 我不确定我是否关注您的问题。如果我使用50,则执行else 块,而不是if 块:jsfiddle.net/bsNWW。也许您真的在使用字符串"50",在这种情况下,Pointy 的回答提供了正确的解释。

标签: javascript numbers typeof


【解决方案1】:

isNaN() 函数隐式地将其参数强制为数字。如果您将字符串“12”传递给它,它会返回false。因此,在您的代码中,变量的值可以是数字的字符串表示形式,如果它是“不错”的字符串,它将通过测试。

NaN 的概念通常并不意味着“不是数字”。这与数据类型无关。这是 IEEE 浮点格式的一个特性。有一些位模式“不是数字”,伪值NaN 代表这些。碰巧语言设计者决定将数字转换失败导致NaN 作为一种标记。

在较新的 JavaScript 环境中,Number 构造函数上有另一个 isNaN 函数。它与全局 isNaN() 的不同之处在于它根本不执行类型强制,并且它检查其参数是否为 NaN。如果你给它传递一个字符串——即使是像“banana”这样的字符串,它不像数字——它会返回false,因为没有字符串值可以是数字NaN

【讨论】:

    【解决方案2】:

    简单的方法在这里注明https://stackoverflow.com/a/16988441/2624935 基本上 NaN 不等于任何东西,甚至它本身。所以如果 a !== a 返回 true a 是 NaN

    【讨论】:

      【解决方案3】:

      简单:

          isNaN(returnValue)
      

      这意味着不是数字。

      【讨论】:

      • 是的,我知道是因为我做到了...但是如果我尝试 if ((returnValue > 100) || (returnValue 0 and
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2016-06-05
      • 2015-06-27
      • 2016-07-02
      • 2011-07-30
      • 2020-02-12
      相关资源
      最近更新 更多