首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript isNaN函数

JavaScript isNaN函数
EN

Stack Overflow用户
提问于 2012-01-19 16:38:39
回答 8查看 22.1K关注 0票数 1

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

代码语言:javascript
复制
if(isNaN(num)) {
    alert('I am not a number');
}
else {
//
     }

但是,如果输入的值是"5748hh“,就像数字一样可以理解,并返回false。怎么啦?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-01-19 16:44:59

来自Mozilla MDN

如果isNaN函数的参数不是数字,则首先将该值强制转换为数字。然后测试结果值以确定它是否为NaN。因此,对于当强制转换为数字类型时产生有效的非NaN数值的非数字(特别是空字符串和布尔原语,它们在强制时给出数值0或1),"false“返回值可能是意想不到的;例如,空字符串肯定是”不是数字“。造成混淆的原因是,术语“不是数字”对表示为IEEE-794浮点值的数字有特定的含义。这个函数应该被解释为回答这个问题,“当这个值被强制转换为一个数值时,它是不是一个IEEE-794 'Not A Number‘值?”

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

例如:

代码语言:javascript
复制
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而得到意外的值

票数 3
EN

Stack Overflow用户

发布于 2012-01-19 16:40:12

您必须先尝试对其进行解析:

代码语言:javascript
复制
if(isNaN(parseInt(num, 10))) {

根据documentation的说法

从isNaN函数规范的最早版本开始,它对非数字参数的行为就一直令人困惑。当isNaN函数的参数不是数字时,首先将该值强制转换为数字。然后测试结果值以确定它是否为NaN。因此,对于非数字,当强制为numeric类型时,会导致有效的非NaN数值(特别是空字符串和布尔原语,它们在强制时会给出0或1的数值)

parseInt()不同,强制将其转换为数字将不会像5748hh那样为字符串生成数字,因此会出现您所看到的行为。

票数 2
EN

Stack Overflow用户

发布于 2012-01-19 16:42:38

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

代码语言:javascript
复制
if (!num.match(/[0-9]+/)) {
  alert("not a number");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8923119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档