五种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 相关文章推荐
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
Mar 13 Javascript
JavaScript实现鼠标点击后层展开效果的方法
May 13 Javascript
浅析js中substring和substr的方法
Nov 09 Javascript
javascript实现Email邮件显示与删除功能
Nov 21 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 Javascript
php 修改密码实现代码
May 24 Javascript
jQuery选择器_动力节点Java学院整理
Jul 05 jQuery
在Vue中使用echarts的实例代码(3种图)
Jul 10 Javascript
详解微信小程序的 request 封装示例
Aug 21 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Python3简单实现串口通信的方法
2019/06/12 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
介绍一下write命令
2014/08/10 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
学生请假条格式
2014/04/11 职场文书
员工安全承诺书
2014/05/22 职场文书
党员个人整改措施
2014/10/24 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
爱情保证书
2015/01/17 职场文书
客房服务员岗位职责
2015/02/09 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
python实现简易名片管理系统
2021/04/11 Python
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL