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 相关文章推荐
JavaScript实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
JavaScript数组方法大全(推荐)
Jul 05 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
Sep 20 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
Nuxt使用Vuex的方法示例
Sep 06 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
python3中函数参数的四种简单用法
2018/07/09 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
幼儿园教学管理制度
2014/02/04 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
社区志愿者活动方案
2014/08/18 职场文书
建筑横幅标语
2014/10/09 职场文书
骨干教师事迹材料
2014/12/17 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android