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 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
jquery 双色表格实现代码
Dec 08 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
Jan 09 Javascript
2014最热门的JavaScript代码高亮插件推荐
Nov 25 Javascript
JavaScript中实现单体模式分享
Jan 29 Javascript
省市区三级联动下拉框菜单javascript版
Aug 11 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
前端 javascript 实现文件下载的示例
Nov 24 Javascript
最新最全的手机号验证正则表达式
Feb 24 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
用jquery写的一个万年历(自写)
2014/01/20 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python使用wxPython实现计算器
2018/01/30 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python发送邮件脚本
2018/05/22 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
python设置随机种子实例讲解
2019/09/12 Python
python定义类self用法实例解析
2020/01/22 Python
Python双链表原理与实现方法详解
2020/02/22 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
外企求职信范文分享
2013/12/31 职场文书
好邻里事迹材料
2014/01/16 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
三八活动策划方案
2014/08/17 职场文书
活动总结模板大全
2015/05/11 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL