五种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 Prototype对象
Jan 07 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
BootStrap下jQuery自动完成的样式调整
May 30 Javascript
javascript实现简单的ajax封装示例
Dec 28 Javascript
AngularJS实现自定义指令及指令配置项的方法
Nov 20 Javascript
js正则表达式校验指定字符串的方法
Jul 23 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 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
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
PHP 实现链式操作
2021/03/09 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
初始Nodejs
2014/11/08 NodeJs
jQuery中extend函数详解
2015/02/13 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
node网页分段渲染详解
2016/09/05 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python optparse模块使用实例
2015/04/09 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
党小组意见范文
2015/06/08 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript