我正在使用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而获得了意外的值

09-30 16:12
查看更多