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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
URL地址中的#符号使用说明
Feb 12 Javascript
node在两个div之间移动,用ztree实现
Mar 06 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
Nov 07 Javascript
JS 作用域与作用域链详解
Apr 07 Javascript
jQuery实现折叠、展开的菜单组效果代码
Sep 16 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 Javascript
JS实现小球的弹性碰撞效果
Nov 11 Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 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
输出控制类
2006/10/09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
TopList标签和JavaScript结合两例
2007/08/12 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
深入浅析Python中的yield关键字
2018/01/24 Python
Python 通配符删除文件的实例
2018/04/24 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
如何使用python写截屏小工具
2020/09/29 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
小学教师个人先进事迹材料
2014/05/17 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
2014年工会工作总结
2014/11/12 职场文书
消防安全主题班会
2015/08/12 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
详解Python常用的魔法方法
2021/06/03 Python