五种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 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
JavaScript实现快速排序的方法分析
Jan 10 Javascript
今天,小程序正式支持 SVG
Apr 20 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
JavaScript canvas绘制折线图
Feb 18 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 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危险函数(disable_functions)
2012/02/23 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
Python中的ceil()方法使用教程
2015/05/14 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
基于Django用户认证系统详解
2018/02/21 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
简单了解python中的与或非运算
2019/09/18 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
清洁工表扬信
2014/01/08 职场文书
工作时间上网检讨书
2014/02/03 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
国庆节主题班会
2015/08/15 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书