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去空格的正则表达式
Mar 26 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
对vue里函数的调用顺序介绍
Mar 17 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
webpack开发环境和生产环境的深入理解
Nov 08 Javascript
利用原生的JavaScript实现简单拼图游戏
Nov 18 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
微信小程序实现点赞业务
Feb 10 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中常用编辑器推荐
2007/01/02 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
js尾调用优化的实现
2019/05/23 Javascript
npm的lock机制解析
2019/06/20 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
在Django的上下文中设置变量的方法
2015/07/20 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python之list对应元素求和的方法
2018/06/28 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
供电工程专业求职信
2014/08/09 职场文书
车辆委托书范本
2014/10/05 职场文书
学生退学证明
2015/06/23 职场文书