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

我想检查(在 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 环境中,isNaN 构造函数上还有另一个 Number 函数。它与全局 isNaN() 的不同之处在于它根本不执行类型强制,它只检查它的参数是否为 NaN 。如果你向它传递一个字符串——即使是像“banana”这样的字符串,它不像数字——它返回 false ,因为没有字符串值可以是数字 NaN

关于JavaScript - 检查变量是否为 : typeof doesnt work, isNaN 的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21415315/

10-12 00:22
查看更多