五种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 相关文章推荐
复制本贴标题和地址的js代码
Jul 01 Javascript
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
详解参数传递四种形式
Jul 21 Javascript
详解js跨域原理以及2种解决方案
Dec 09 Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
微信小程序返回多级页面的实现方法
Oct 27 Javascript
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
微信小程序个人中心的列表控件实现代码
Apr 26 Javascript
nuxt静态部署打包相对路径操作
Nov 06 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
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python实现二叉搜索树
2016/02/03 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
10款最好的Python开发编辑器
2019/07/03 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
python之随机数函数的实现示例
2020/12/30 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
国外的一些J2EE面试题一
2012/10/13 面试题
总经理任命书范本
2014/06/05 职场文书
标准单位租车协议书
2014/09/23 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
单位领导婚礼致辞
2015/07/28 职场文书