【发布时间】:2014-07-27 11:58:15
【问题描述】:
为什么nodejs中的isNaN函数在以下情况下返回false?
isNaN(''),isNaN('\n'),isNaN('\t')
这很奇怪。
有人有我认为 isNaN 代表的不是数字的想法吗?
谁能解释一下
提前致谢!
【问题讨论】:
为什么nodejs中的isNaN函数在以下情况下返回false?
isNaN(''),isNaN('\n'),isNaN('\t')
这很奇怪。
有人有我认为 isNaN 代表的不是数字的想法吗?
谁能解释一下
提前致谢!
【问题讨论】:
isNan() 旨在帮助检测“数学上未定义”的事物 - 例如0/0 -
node
> isNaN(0/0)
true
> isNaN(1/0)
false
> isNaN(Math.sqrt(-1))
true
> isNaN(Math.log(-1))
true
你在这个问题中得到的关于如何检测数字的其他建议是可靠的。
【讨论】:
isNaN 是一个“不是数字”的函数,它在没有数字作为参数时返回 true,在给定数字时返回 false
【讨论】:
NaN 是一个非常具体的东西:它是一个浮点值,根据 IEEE754 规范 (Wikipedia article) 设置了适当的 NaN 标志。
如果要检查字符串中是否有数值,可以使用parseFloat(str) (MDN on parseFloat)。如果它没有找到任何有效的数字内容,或者在找到数字之前找到了无效字符,它将返回一个 NaN 值。
所以请尝试使用isNaN(parseFloat(str)) - 它为我发布的所有三个示例提供true。
【讨论】:
因为你没有传递给它一个数字,它会将它转换为数字。所有这些都转换为0,即0,而不是NaN
Number('')
0
Number('\n')
0
Number('\t')
0
isNaN(0)
false
请注意,NaN 不代表“不是 JavaScript 编号”。 In fact it's completely separate from JavaScript 并存在于所有支持 IEEE-754 浮点数的语言中。
如果你想检查某个东西是否是一个javascript数字,检查是
if (typeof value === "number") {
}
【讨论】:
NaN 的值是一个 Javascript 数字 => typeof NaN === 'number' // true