我目前面临一个问题,它可能很简单,但我在研究中没有发现......
我想检查(在 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,但这不是我目前正在寻找的 ;)
你能解释一下为什么第一次尝试不起作用(和/或让它起作用)吗?
谢谢!
最佳答案
isNaN()
函数隐式地将其参数强制转换为数字。如果您向它传递字符串“12”,它会返回 false
。因此,在您的代码中,变量的值可以是数字的字符串表示形式,如果它是一个“不错”的字符串,它将通过测试。
NaN
的概念通常并不真正意味着“不是数字”。这与数据类型无关。它是 IEEE 浮点格式的一个特性。有些位模式“不是数字”,伪值 NaN
表示这些位模式。碰巧语言设计者决定将失败的数字转换导致 NaN
作为一种标记。
在较新的 JavaScript 环境中,Number
构造函数上有另一个 isNaN
函数。它与全局 isNaN()
的不同之处在于它根本不执行类型强制,并且它仅检查其参数是否为 NaN
.如果你给它传递一个字符串——即使是像“banana”这样的字符串,它一点也不像数字——它返回 false
,因为没有字符串值可以是数字 NaN
.
关于JavaScript - 检查变量是否为数字 : typeof doesnt work, isNaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21415315/