我正在使用isNan函数来检查输入的值是否为数字:
if(isNaN(num)) {
alert('I am not a number');
}
else {
//
}
但是,如果输入的值是,例如“5748hh”,则可以理解为数字并返回false
。有什么问题?
答案 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
声明
答案 1 :(得分:2)
您必须先尝试解析它:
if(isNaN(parseInt(num, 10))) {
由于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,则输入的数据不是数字。
if(isNaN("5748hh"))
{
alert("not a number");
}
else
{
alert("a number");
}
返回true:“不是数字”,就像它应该的那样。
答案 6 :(得分:0)
NaN是一个特殊号码。 isNaN(argument)函数检查参数是否为NaN值,但如果参数是字符串,则表示有效整数,它也给出true。