法一:
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在解析整數(shù)之前強(qiáng)迫將第一個參數(shù)解析成字符串灯抛。
這種方法將數(shù)字轉(zhuǎn)換成整型不是一個好的選擇姿锭。
法四:
function isInteger(obj) {
return (obj | 0) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
這個函數(shù)很不錯锄贼,效率還很高规哪。但有個缺陷已脓,上文提到過同木,
位運算只能處理32位以內(nèi)的數(shù)字皱坛,對于超過32位的無能為力肢簿,如
復(fù)制代碼 代碼如下:
isInteger(Math.pow(2, 32)) // 32位以上的數(shù)字返回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已經(jīng)支持深浮。