五种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学习历程和心得小结
Aug 16 Javascript
UpdatePanel和Jquery冲突的解决方法
Apr 01 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
基于javascript实现动态时钟效果
Aug 18 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
微信小程序基于高德地图查找位置并显示文字
Oct 30 Javascript
js+h5 canvas实现图片验证码
Oct 11 Javascript
uniapp实现可滑动选项卡
Oct 21 Javascript
JavaScript动态生成表格的示例
Nov 02 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 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
长波知识介绍
2021/03/01 无线电
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
PHP 透明水印生成代码
2012/08/27 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php接口技术实例详解
2016/12/07 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
JavaScript实现筛选数组
2021/03/02 Javascript
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python读取Android permission文件
2013/11/01 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
竞选宣传委员演讲稿
2014/05/24 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python