整数

整数(Integer),分为:正整数、零与负整数,它是一个无限集合。

既然知道了概念,那判断一个数是不是整数也就有点头绪了。

方法一:

根据函数parseInt(string, radix)

function isInteger(n){
    return parseInt(n, 10) === n;
}

运行函数isInteger测试:

> isInteger(8)
> true

> isInteger(8.1)
> false

> isInteger(-8.1)
> false

一切看起来多美完美,那么再来测试:

> isInteger(8888888888888888888888)
> 

给你短暂的几秒思考下结果…… 你就会发现上面的结果竟然是false,这是怎么回事呢? 原因是函数parseInt会将第一个参数自动转为科学计数法的数字,数字 8888888888888888888888 用科学计数法表示为 8.888888888888889e+21,最后的结果也就导致不相等了。关于科学计数法可以参考我的一篇文章科学计数法。那么上面的方法也是有缺陷的。

方法二:

判断数据类型,然后求余数看看能不能被1整除,是的话就是整数。

function isInteger(n){
    return typeof n === 'number' && n % 1 === 0;
}

运行函数isInteger测试:

> isInteger(8)
> true

> isInteger(8.1)
> false

> isInteger(-8.1)
> false

> isInteger(8888888888888888888888)
> true

方法三:

根据Math.ceilMath.floorMath.round方法来判断

function isInteger(n){
    return typeof n === 'number' && Math.ceil(n) === n;
}

测试结果也是妥妥的~ 还有没有其它的方法呢?如果您有好的想法可以提交一个 issue。