五种js判断是否为整数类型方式


Posted in Javascript onDecember 03, 2015

这篇看看如何判断为整数类型(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.ajax 用户登录验证代码
Oct 29 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 Javascript
真正好用的js验证上传文件大小的简单方法
Oct 27 Javascript
js实现移动端微信页面禁止字体放大
Feb 16 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
利用npm 安装删除模块的方法
May 15 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
Dec 03 #Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
Dec 03 #Javascript
学习JavaScript设计模式(代理模式)
Dec 03 #Javascript
全面解析Bootstrap图片轮播效果
Dec 03 #Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 #Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 #Javascript
Javascript实现检测客户端类型代码封包
Dec 03 #Javascript
You might like
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
在python中用url_for构造URL的方法
2019/07/25 Python
如何理解python对象
2020/06/21 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
工程专业求职自荐书范文
2014/02/18 职场文书
如何写自我鉴定
2014/03/19 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
党员转正党支部意见
2015/06/02 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
Python实现自动玩连连看的脚本分享
2022/04/04 Python