我正在使用isNan函数检查输入的值是否为数字:
if(isNaN(num)) {
alert('I am not a number');
}
else {
//
}
但是,如果输入的值例如是“ 5748hh”,则可以像数字一样理解并返回
false
。怎么了? 最佳答案
来自Mozilla MDN
当isNaN函数的参数不是数字时,该值首先被强制为数字。然后测试结果值以确定它是否为NaN。因此,对于非数字,当将其强制转换为数字类型时会导致产生有效的非NaN数值(特别是空字符串和布尔基元,当它们被强制数字为零或一时),返回的“ false”可能是意外的;例如,空字符串肯定是“不是数字”。混淆源于以下事实:术语“非数字”对于表示为IEEE-794浮点值的数字具有特定含义。该函数应解释为回答以下问题:“当将此值强制为数字值时,该值为IEEE-794'非数字'值吗?”
因此alert(isNaN('45345ll'))
返回true,因为其值强制与parseInt/parseFloat
转换不同。
例如
var num = false;
console.log(isNaN(num)); /* return false because the coerced value is 0 but */
console.log(parseInt(num, 10)); /* return isNaN */
可能由于
if
语句中缺少paren而获得了意外的值