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 相关文章推荐
javascript instanceof 内部机制探析
Oct 15 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
Jan 10 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
AngularGauge 属性解析详解
Sep 06 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 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 flush类输出缓冲剖析
2008/10/19 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
python求列表交集的方法汇总
2014/11/10 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python的Django框架安装全攻略
2015/07/15 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Django URL传递参数的方法总结
2016/08/28 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python实现彩票系统
2020/06/28 Python
Python列表(List)知识点总结
2019/02/18 Python
Django实现文件上传下载功能
2019/10/06 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
幼儿园教学管理制度
2014/02/04 职场文书
高中教师评语大全
2014/04/25 职场文书
3分钟演讲稿
2014/04/30 职场文书
投资意向书
2014/07/30 职场文书
自我工作评价范文
2015/03/06 职场文书
公司放假通知范文
2015/04/14 职场文书
追悼会答谢词范文
2015/09/29 职场文书
创业计划书之游泳馆
2019/09/16 职场文书