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 相关文章推荐
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
ASP.NET中AJAX 调用实例代码
May 03 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
Express本地测试HTTPS的示例代码
Jun 06 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
JavaScript实现点击自制菜单效果
Feb 02 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
基于php冒泡排序算法的深入理解
2013/06/09 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
使用python实现个性化词云的方法
2017/06/16 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Flask框架web开发之零基础入门
2018/12/10 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
Django中的静态文件管理过程解析
2019/08/01 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
文秘自荐信
2013/10/20 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
作文批改评语大全
2014/04/23 职场文书
校园绿化美化方案
2014/06/08 职场文书
诚信教育主题班会
2015/08/13 职场文书
优秀大学生申请书
2019/06/24 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android