五种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按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
js写的方法实现上传图片之后查看大图
Mar 05 Javascript
JS实现动态给图片添加边框的方法
Apr 01 Javascript
老生常谈js动态添加事件--- 事件委托
Jul 19 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
mui框架移动开发初体验详解
Oct 11 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
JavaScript的Proxy可以做哪些有意思的事儿
Jun 15 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
vue中提示$index is not defined错误的解决方式
Sep 02 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
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
php合并js请求的例子
2013/11/01 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
python将list转为matrix的方法
2018/12/12 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
优秀教师推荐材料
2014/12/16 职场文书
节水倡议书
2015/01/19 职场文书
课外活动总结
2015/02/04 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS