五种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 相关文章推荐
基于jquery编写的横向自适应幻灯片切换特效的实例代码
Aug 06 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
JS三目运算(三元运算)方法详解
Mar 01 Javascript
简单实现js轮播图效果
Jul 14 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
webpack学习教程之前端性能优化总结
Dec 05 Javascript
vue 子组件向父组件传值方法
Feb 26 Javascript
小程序tab页无法传递参数的方法
Aug 03 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
JS实现简单移动端鼠标拖拽
Jul 23 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
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
js编写简单的计时器功能
2017/07/15 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
vue实现弹幕功能
2019/10/25 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python用模块pytz来转换时区
2016/08/19 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
python写入已存在的excel数据实例
2018/05/03 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
美容院管理规章制度
2015/08/05 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
python实现自动清理文件夹旧文件
2021/05/10 Python
anaconda python3.8安装后降级
2021/06/11 Python