JavaScript是NaN函数

时间:2012-01-19 08:38:39

标签: javascript jquery

我正在使用isNan函数来检查输入的值是否为数字:

if(isNaN(num)) {
    alert('I am not a number');
}
else {
//
     }

但是,如果输入的值是,例如“5748hh”,则可以理解为数字并返回false。有什么问题?

7 个答案:

答案 0 :(得分:3)

来自Mozilla MDN

  

当isNaN函数的参数不是数字时,该值首先被强制转换为数字。然后测试得到的值以确定它是否是NaN。因此,对于非数字,当强制转换为数字类型时会产生有效的非NaN数值(特别是空字符串和布尔基元,当强制赋予数值0或1时)," false"返回值可能是意外的;例如,空字符串肯定是#34;而不是数字。"混淆源于这样一个事实:对于表示为IEEE-794浮点值的数字,术语“不是数字”具有特定含义。该功能应该被解释为回答问题,"当被强制为数值时,该值是IEEE-794'非数字'值#34;

所以alert(isNaN('45345ll'))返回true,因为其值强制与parseInt/parseFloat转换不同。

e.g。

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,可能会有意外的价值

答案 1 :(得分:2)

您必须先尝试解析它:

if(isNaN(parseInt(num, 10))) {

根据documentation

  

由于isNaN函数规范的最早版本,其非数字参数的行为一直令人困惑。 当isNaN函数的参数不是数字时,该值首先被强制转换为数字。然后测试得到的值以确定它是否是NaN。因此对于非数字,当强制转换为数字类型时会产生有效的非NaN数值(特别是空字符串和布尔基元,强制时给出数值为零或一)

parseInt()不同,此强制转换为数字会导致像5748hh这样的字符串不是数字,从而导致您看到的行为。

答案 2 :(得分:2)

如果你解析一个以数字开头的字符串,它将成功地解析为数字,忽略字符串的其余部分。例如parseInt('56sadfh', 10)将解析为56。如果你想防止这种情况,你应该使用正则表达式来检查输入。例如

if (!num.match(/[0-9]+/)) {
  alert("not a number");
}

答案 3 :(得分:0)

isNaN("5748hh");返回true

答案 4 :(得分:0)

在我的萤火虫中:

>>> isNaN("5748hh")
true

答案 5 :(得分:0)

isNaN =不是数字,因此如果返回true,则输入的数据不是数字。

http://jsfiddle.net/8fMAr/

if(isNaN("5748hh"))
{
    alert("not a number");
}
else
{
    alert("a number");   
}

返回true:“不是数字”,就像它应该的那样。

答案 6 :(得分:0)

NaN是一个特殊号码。 isNaN(argument)函数检查参数是否为NaN值,但如果参数是字符串,则表示有效整数,它也给出true。