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 相关文章推荐
斜45度寻路实现函数
Aug 20 Javascript
IE8 中使用加速器(Activities)
May 14 Javascript
jQuery操作 input type=checkbox的实现代码
Jun 14 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
JavaScript实现分页效果
Mar 28 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
React路由管理之React Router总结
May 10 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
mustache.js实现首页元件动态渲染的示例代码
Dec 28 Javascript
vue实力踩坑之push当前页无效
Apr 10 Vue.js
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 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP中常用的转义函数
2014/02/28 PHP
php简单实现MVC
2015/02/05 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
常用的javascript设计模式
2017/01/11 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
家长对老师的感言
2014/03/11 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
离婚协议书范文
2015/01/26 职场文书
三八妇女节寄语
2015/02/27 职场文书
2019银行竞聘书
2019/06/21 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫