五种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 css float属性的特殊写法
Nov 13 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
Javascript使用uploadify来实现多文件上传
Nov 16 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
vue input输入框关键字筛选检索列表数据展示
Oct 26 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
JS实现的排列组合算法示例
2019/07/16 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
python输出带颜色字体实例方法
2019/09/01 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
python pygame实现球球大作战
2019/11/25 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
应届毕业生求职信范文
2013/12/18 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
土地租赁协议书
2015/01/29 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书