JavaScript中判断整数的多种方法总结


Posted in Javascript onNovember 08, 2014

之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(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 相关文章推荐
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
Feb 04 Javascript
Knockout数组(observable)使用详解示例
Nov 15 Javascript
chrome不支持form.submit的解决方案
Apr 28 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
Aug 01 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
JS实现小球的弹性碰撞效果
Nov 11 Javascript
微信小程序中显示倒计时代码实例
May 09 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 #Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 #Javascript
JavaScript函数模式详解
Nov 07 #Javascript
JavaScript代码复用模式详解
Nov 07 #Javascript
JavaScript中的style.cssText使用教程
Nov 06 #Javascript
JavaScript组合拼接字符串的效率对比测试
Nov 06 #Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 #Javascript
You might like
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
详解python深浅拷贝区别
2019/06/24 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
小车司机岗位职责
2013/11/25 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
工程承包协议书
2014/10/20 职场文书
交通事故协议书范文
2014/10/23 职场文书
2015年教研工作总结
2015/05/23 职场文书
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers