千万别用 isNaN 判断是否数字!
作者:admin 时间:2022-5-12 17:17:1 浏览:说实在的,在知道这个事实之前,我一直用的是isNaN
来判断是否数字的,我想很多人都在用它,因为它简单易用。在知道这个事实之后,我在想,我的应用出现了多少误判事件!
isNaN的含义及用法
isNaN()
是“不是数字”的意思, NaN=Not a Number 。而isNaN
的用法也十分简单,若isNaN(b)
为true
,则说明b不是数字。
isNaN的误判示例
遗憾的是,isNaN
会出现误判的情况,比如下面的几个示例:
isNaN(true); //false 误判
isNaN(""); //false 误判
isNaN(" "); //false 误判
isNaN(null); //false 误判
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"
如果变量是 number
类型,它将返回 'number
'字符串,我们可以使用它来确定变量是否为数字类型。
var numberOfpushUpsToday = 34;
if(typeof numberOfpushUpsToday === 'number' ){
console.log('它是一个数字')
}
else {
console.log('它不是一个数字')
}
typeof()
的表现要比isNaN()
好得多,它正确地确定字符串变量null
和布尔值(true
和false
)不是数字。
2) 使用Number.isFinite()
函数isFinite()
确定传递的值是否是有限的,参数首先转换为数字,然后检查值是否有限。此方法适用于 undefined
和 Boolean
,因此这是上述所有方法中最好的方法。
Number.isFinite(34) // 返回 true
Number.isFinite('Hello') // 返回 false
Number.isFinite(undefined) // 返回 false
Number.isFinite(true) // 返回 false
Number.isFinite(null) // 返回 false
var numberOfpushUpsToday = 34;
if(Number.isFinite(numberOfpushUpsToday) ){
console.log('它是一个数字')
}
else {
console.log('它不是一个数字')
}
总结
本文介绍了isNaN
判断是否数字的缺陷,另外介绍了两种判断是否数字的方法,推荐使用Number.isFinite()
。
相关文章
标签: isNaN
- 站长推荐