我目前遇到一个问题,可能很简单,但我在研究中一无所获......
我想检查(在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,但这不是我目前正在寻找的;)
请您解释一下为什么第一次尝试不起作用(和/或让它起作用)?
谢谢!
答案 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)
这意味着不是数字。