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 相关文章推荐
window.open()弹出居中的窗口
Feb 01 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
node.js中的fs.link方法使用说明
Dec 15 Javascript
浅谈Javascript如何实现匀速运动
Dec 19 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
微信小程序开发之IOS和Android兼容的问题
Sep 26 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
JS使用cookie保存用户登录信息操作示例
May 30 Javascript
微信提示 在浏览器打开 效果实现过程解析
Sep 10 Javascript
微信小程序自定义联系人弹窗
May 26 Javascript
小程序实现录音功能
Sep 22 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
arguments对象
2006/11/20 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
力学专业毕业生自荐信
2013/11/17 职场文书
普通院校学生的自荐信
2013/11/27 职场文书
大学生志愿者感言
2014/01/15 职场文书
报关专员求职信范文
2014/02/22 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
运动会开幕式致辞
2015/07/29 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python