JavaScript isNaN函数

JavaScript isNaN函数,javascript,jquery,Javascript,Jquery,我正在使用isNan函数检查输入的值是否为数字: if(isNaN(num)) { alert('I am not a number'); } else { // } 然而,如果输入的值是,例如,“5748hh”,它就像一个数字一样可以理解,并返回false。有什么问题吗?您必须先尝试分析它: if(isNaN(parseInt(num, 10))) { 根据报告: 自从最早版本的isNaN函数规范以来,它对非数值参数的行为一直令人困惑当isNaN函数的参数不是数字时,该值

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

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

然而,如果输入的值是,例如,“5748hh”,它就像一个数字一样可以理解,并返回
false
。有什么问题吗?

您必须先尝试分析它:

if(isNaN(parseInt(num, 10))) {
根据报告:

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


parseInt()
不同的是,强制使用数字会导致类似
5748hh
的字符串没有数字,因此您会看到这种行为。

您必须先尝试解析它:

if(isNaN(parseInt(num, 10))) {
根据报告:

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


parseInt()
不同,强制为一个数字会导致像
5748hh
这样的字符串没有数字,从而导致您看到的行为。

isNaN(“5748hh”)
返回
true
isNaN(“5748hh”)
返回
true

我试过了,结果是true

alert(isNaN("123hh"));  // - alert true.

参见JSfiddler

我尝试了它,它给出了正确的答案

alert(isNaN("123hh"));  // - alert true.
请参见我的Firebug中的JSfiddler

>>> isNaN("5748hh")
true
在我的萤火虫中:

>>> isNaN("5748hh")
true

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

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

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

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

当isNaN函数的参数不是数字时,该值首先强制为数字。然后测试结果值以确定其是否为NaN。因此,对于强制为数字类型时产生有效非NaN数值的非数字(尤其是空字符串和布尔基元,强制时给出数值零或一),“false”返回值可能是意外的;例如,空字符串肯定是“不是数字”。混淆源于“不是数字”一词对表示为IEEE-794浮点值的数字有特定的含义。该函数应解释为回答以下问题:“当强制为数值时,该值是否为IEEE-794‘不是数字’值?”

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

e、 g

由于Mozilla MDN的
if
语句中缺少参数,可能会得到一个意外值

当isNaN函数的参数不是数字时,该值首先强制为数字。然后测试结果值以确定其是否为NaN。因此,对于强制为数字类型时产生有效非NaN数值的非数字(尤其是空字符串和布尔基元,强制时给出数值零或一),“false”返回值可能是意外的;例如,空字符串肯定是“不是数字”。混淆源于“不是数字”一词对表示为IEEE-794浮点值的数字有特定的含义。该函数应解释为回答以下问题:“当强制为数值时,该值是否为IEEE-794‘不是数字’值?”

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

e、 g


如果
语句isNaN=不是一个数字,那么如果它返回true,那么输入的数据就不是一个数字,那么您可能会由于
语句中缺少paren而得到一个意外值


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

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

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

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

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

在本例中,您需要正确关闭括号:)在num之后缺少一个结束符。
isNaN(“5748hh”)==true什么不起作用?在本例中,您需要正确地关闭括号:)在num之后缺少一个结束符。)
isNaN(“5748hh”)==true什么不起作用?这实际上从字符串“5478hh”返回了一个有效的数字5748。@zvona OP说“5748hh”这就像一个数字一样可以理解,因此我理解示例字符串应该返回数字
5748
@ShadowWizard强制与转换不同,因此
5748aa