五种js判断是否为整数类型方式


Posted in Javascript onDecember 03, 2015

这篇看看如何判断为整数类型(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 相关文章推荐
自己整理的一个javascript日期处理函数
Oct 16 Javascript
使用javascript获取flash加载的百分比的实现代码
May 25 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
Aug 06 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
原生js配合cookie制作保存路径的拖拽
Dec 29 Javascript
Javascript的表单验证长度
Mar 16 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
js回调函数原理与用法案例分析
Mar 04 Javascript
vant实现购物车功能
Jun 29 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 Javascript
React配置子路由的实现
Jun 03 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
Dec 03 #Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
Dec 03 #Javascript
学习JavaScript设计模式(代理模式)
Dec 03 #Javascript
全面解析Bootstrap图片轮播效果
Dec 03 #Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 #Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 #Javascript
Javascript实现检测客户端类型代码封包
Dec 03 #Javascript
You might like
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php中设置index.php文件为只读的方法
2013/02/06 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python 性能优化方法小结
2017/03/31 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Django CBV类的用法详解
2019/07/26 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
体育学院毕业生自荐信
2013/11/03 职场文书
办理信用卡工作证明
2014/01/11 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
爱与责任演讲稿
2014/05/20 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
运动员入场词
2015/07/18 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python