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 相关文章推荐
js触发onchange事件的方法说明
Mar 08 Javascript
jQuery带时间的日期控件代码分享
Aug 26 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
JavaScript实现页面定时刷新(定时器,meta)
Oct 12 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
JavaScript实现区块链
Mar 14 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
详解ECMAScript typeof用法
Jul 25 Javascript
Vue中的vue-resource示例详解
Nov 02 Javascript
js实现下拉框二级联动
Dec 04 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
Node快速切换版本、版本回退(降级)、版本更新(升级)
Jan 07 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笔试题
2009/08/04 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
python中使用%与.format格式化文本方法解析
2017/12/27 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Python API len函数操作过程解析
2020/03/05 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python+requests接口自动化框架的实现
2020/08/31 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
工业设计专业推荐信
2013/10/29 职场文书
中专生的个人自我评价
2013/12/11 职场文书
期末自我鉴定
2014/01/23 职场文书
2014年电教工作总结
2014/12/19 职场文书