判断是否是数字

法一:
function isInteger(obj) {
return typeof obj === 'number' && obj%1 === 0
}
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

法二:
function isInteger(obj) {
return Math.floor(obj) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

法三:
function isInteger(obj) {
return parseInt(obj, 10) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

但是:
isInteger(1000000000000000000000) // false
原因是parseInt在解析整数之前强迫将第一个参数解析成字符串。
这种方法将数字转换成整型不是一个好的选择。

法四:
function isInteger(obj) {
return (obj | 0) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

这个函数很不错,效率还很高。但有个缺陷,上文提到过,
位运算只能处理32位以内的数字,对于超过32位的无能为力,如
复制代码 代码如下:
isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了

法五:
Number.isInteger(3) // true
Number.isInteger(3.1) // false
Number.isInteger('') // false
Number.isInteger('3') // false
Number.isInteger(true) // false
Number.isInteger([]) // false
目前,最新的Firefox和Chrome已经支持。

你可能感兴趣的:(判断是否是数字)