五种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 相关文章推荐
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
JavaScript中Math.SQRT2属性的使用详解
Jun 14 Javascript
jquery如何获取元素的滚动条高度等实现代码
Oct 19 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
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
PHP新手入门学习方法
2011/05/08 PHP
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python 文件管理实例详解
2015/11/10 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python函数参数操作详解
2018/08/03 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
外语专业毕业生个人的自荐信
2013/11/19 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
北京爱情故事观后感
2015/06/12 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS