JavaScript中判断整字类型最简洁的实现方法


Posted in Javascript onNovember 08, 2014

我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是number类型。

function isNumber(obj) {

    return typeof obj === 'number'

}

这个函数对于整数和浮点数都没有问题,但对于NaN值也返回true这让人感到不爽,毕竟用isNumber判断通过后谁也不会用NaN去做算术运算。

那改进一下,用Object.prototype.toString试试。

function isNumber(obj) {

    return Object.prototype.toString.call(obj) === '[object Number]'

}

和typeof判断一样,对于NaN也返回true,代码量还大了,这不是想要的结果。toString.call方式判断数组(Array)可行,数字则力不从心了。

再改进下,NaN值用isNaN函数来对付。

function isNumber(obj) {

    return typeof obj === 'number' && !isNaN(obj)

}

这次,如果传入的是非数字(NaN或者可转成NaN的值)就返回false了

function isNumber(obj) {

    return typeof obj === 'number' && !isNaN(obj)

}

isNumber(1)   // true

isNumber(1.2) // true

isNumber(NaN) // false

isNumber( parseInt('a') ) // false

嗯,这个isNumber不错了,但还有一个等价的,用isFinite来判断

function isNumber(obj) {

    return typeof obj === 'number' && isFinite(obj)    

}

到现在,最短代码的数字判断是此文提到的第三个使用isNaN函数的。下面隆重推出世界上最短的数字判断代码

function isNumber(obj) {

    return obj === +obj

}

对于整数,浮点数返回true,对于NaN或可转成NaN的值返回false。

没看懂是吗? 咕~~(???)

园友说这还不是世界上最短判断数字代码,参数obj可以改成一个字符的。(⊙o⊙)你是对的。

举一反三,类似的利用JS动态语言特性(运算符运算时内部自动类型转换)最短的判断还有。

// 判断字符串

function isString(obj) {

    return obj === obj+''

}

// 判断布尔类型

function isBoolean(obj) {

    return obj === !!obj

}
Javascript 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
简单的代码实现jquery定时器
Jan 03 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
javascript比较两个日期的先后示例代码
Dec 31 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
Node.js事件驱动
Jun 18 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 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
javascript解析json实例详解
Nov 05 #Javascript
You might like
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
php 强制下载文件实现代码
2013/10/28 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
js导出txt示例代码
2014/01/14 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
Vue的Options用法说明
2020/08/14 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
python如何实现excel数据添加到mongodb
2015/07/30 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
Python自动抢红包教程详解
2019/06/11 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
python palywright库基本使用
2021/01/21 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
一份比较全的PHP面试题
2016/07/29 面试题
abstract是什么意思
2012/02/12 面试题
违反学校规定检讨书
2014/01/18 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
认错检讨书
2014/10/02 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js