JavaScript - 检查变量是否为数字 : typeof doesnt work, isNaN

标签 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,但这不是我目前正在寻找的 ;)

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

谢谢!

最佳答案

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/

相关文章:

php - mysql 和 php 中的数字递增

javascript - typeof 调用名称作为字符串传递的函数

javascript - document.getElementById.value 出现意外结果?

javascript - jQuery 切换,改变高度

javascript - jQuery 函数(调整窗口大小)

r - 从其他 data.frame R 分配 data.frame 列类

javascript - 类和数组真的只是 JavaScript 中的对象吗?

javascript - Firefox 3.5 和 IE8 中的 getAttribute 无法正常工作

c - 制作一个计算器小程序,需要判断用户输入的是不是字母

algorithm - 计算数字出现次数