JavaScript - 检查变量是否为数字:typeof不起作用,isNaN

时间:2014-01-28 19:45:57

标签: javascript numbers typeof

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

我想检查(在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,但这不是我目前正在寻找的;)

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

谢谢!

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

这里注意到简单的方法https://stackoverflow.com/a/16988441/2624935 基本上NaN甚至不等于任何东西。因此,如果!== a返回true,则a是NaN

答案 2 :(得分:-1)

易:

    isNaN(returnValue)

这意味着不是数字。