JavaScript中判断整数的多种方法总结


Posted in Javascript onNovember 08, 2014

之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer)。

JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的double类型一样。但实际操作中比如数组索引、位操作则是基于32位整数。

方式一、使用取余运算符判断

任何整数都会被1整除,即余数是0。利用这个规则来判断是否是整数。

function isInteger(obj) {

    return obj%1 === 0

}

isInteger(3) // true

isInteger(3.3) // false

以上输出可以看出这个函数挺好用,但对于字符串和某些特殊值显得力不从心

isInteger('') // true

isInteger('3') // true

isInteger(true) // true

isInteger([]) // true

对于空字符串、字符串类型数字、布尔true、空数组都返回了true,真是难以接受。对这些类型的内部转换细节感兴趣的请参考:JavaScript中奇葩的假值

因此,需要先判断下对象是否是数字,比如加一个typeof

function isInteger(obj) {

    return typeof obj === 'number' && obj%1 === 0

}

isInteger('') // false

isInteger('3') // false

isInteger(true) // false

isInteger([]) // false

嗯,这样比较完美了。

二、使用Math.round、Math.ceil、Math.floor判断

整数取整后还是等于自己。利用这个特性来判断是否是整数,Math.floor示例,如下

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

这个直接把字符串,true,[]屏蔽了,代码量比上一个函数还少。

三、通过parseInt判断

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

竟然返回了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了

当然,多数时候我们不会用到那么大的数字。

五、ES6提供了Number.isInteger

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已经支持。

Javascript 相关文章推荐
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
javascript各浏览器中option元素的表现差异
Apr 07 Javascript
document节点对象的获取方式示例介绍
Dec 24 Javascript
javascript里使用php代码实例
Dec 13 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
gulp安装以及打包合并的方法教程
Nov 19 Javascript
vue实例中data使用return包裹的方法
Aug 27 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
微信小程序实现自定义底部导航
Nov 18 Javascript
JavaScript this关键字的深入详解
Jan 14 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 #Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 #Javascript
JavaScript函数模式详解
Nov 07 #Javascript
JavaScript代码复用模式详解
Nov 07 #Javascript
JavaScript中的style.cssText使用教程
Nov 06 #Javascript
JavaScript组合拼接字符串的效率对比测试
Nov 06 #Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 #Javascript
You might like
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Python 连连看连接算法
2008/11/22 Python
PHP webshell检查工具 python实现代码
2009/09/15 Python
python从ftp下载数据保存实例
2013/11/20 Python
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python多线程与多进程及其区别详解
2019/08/08 Python
python数据化运营的重要意义
2019/11/25 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
关于爱国的演讲稿
2014/05/07 职场文书
民族学专业求职信
2014/07/28 职场文书
企业委托书范本
2014/09/13 职场文书
小学生节水倡议书
2015/04/29 职场文书