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 相关文章推荐
自动检查并替换文本框内的字符
Jun 30 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
Vue-resource拦截器判断token失效跳转的实例
Oct 27 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
Jun 29 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
Nov 14 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 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代码
2012/07/17 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python匿名函数用法实例分析
2019/08/03 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
采购求职信
2014/03/17 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书