技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

千万别用 isNaN 判断是否数字!

作者:admin    时间:2022-5-12 17:17:1    浏览:

说实在的,在知道这个事实之前,我一直用的是isNaN来判断是否数字的,我想很多人都在用它,因为它简单易用。在知道这个事实之后,我在想,我的应用出现了多少误判事件!

 千万别用 isNaN 判断是否数字!

isNaN的含义及用法

isNaN()是“不是数字”的意思, NaN=Not a Number 。而isNaN的用法也十分简单,若isNaN(b)true,则说明b不是数字。

isNaN的误判示例

遗憾的是,isNaN会出现误判的情况,比如下面的几个示例:

isNaN(true); //false   误判
isNaN(""); //false    误判
isNaN(" "); //false    误判
isNaN(null); //false    误判

demodownload

isNaN为什么会误判

isNaN 函数的参数不是Number类型时,该值首先被强制转换为 Number。然后测试结果值以确定它是否NaN,因此,对于非数字,当强制转换为数字类型时会产生一个有效的非 NaN 数值(特别是空字符串和布尔基元,当强制转换为数字值 0 或 1)时,“false”返回值可能是意料之外的;例如,空字符串肯定是“不是数字”,但isNaN("")返回是false

其他判断是否数字的方法

既然isNaN不完美,那么我们就找其他的方法吧。除了isNaN,我们还可以用其他方法来判断是否数字。这里介绍两种方法。

1) 使用typeof()

 typeof 操作符返回一个字符串,表示未经计算的操作数的类型。

num = 45
strng = '34'
typeof num // 返回 'number'
typeof strng // 返回 "string"
typeof undefined // 返回 "undefined"
typeof null // 返回 "object"

demodownload

如果变量是 number 类型,它将返回 'number'字符串,我们可以使用它来确定变量是否为数字类型。

var numberOfpushUpsToday = 34; 

if(typeof numberOfpushUpsToday === 'number' ){
    console.log('它是一个数字')
}
else {
    console.log('它不是一个数字')
}

typeof()的表现要比isNaN()好得多,它正确地确定字符串变量null和布尔值(truefalse)不是数字。

2) 使用Number.isFinite()

函数isFinite()确定传递的值是否是有限的,参数首先转换为数字,然后检查值是否有限。此方法适用于 undefinedBoolean ,因此这是上述所有方法中最好的方法。

Number.isFinite(34) // 返回 true
Number.isFinite('Hello') // 返回 false
Number.isFinite(undefined) // 返回 false
Number.isFinite(true) // 返回 false
Number.isFinite(null) // 返回 false

demodownload

var numberOfpushUpsToday = 34; 

if(Number.isFinite(numberOfpushUpsToday) ){
    console.log('它是一个数字')
}
else {
    console.log('它不是一个数字')
}

总结

本文介绍了isNaN判断是否数字的缺陷,另外介绍了两种判断是否数字的方法,推荐使用Number.isFinite()

相关文章

标签: isNaN  
相关文章
    • IT热文
    • 站长推荐