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 相关文章推荐
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
关于js类的定义
Jun 28 Javascript
js 判断checkbox是否选中的操作方法
Nov 09 Javascript
AngularJS学习笔记之TodoMVC的分析
Feb 22 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
Apr 01 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 Javascript
使用百度地图实现地图网格的示例
Feb 06 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
vue v-for直接循环数字实例
Nov 07 Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 06 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生成条形图的方法
2014/12/10 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
详解Python下ftp上传文件linux服务器
2018/06/21 Python
Python使用gRPC传输协议教程
2018/10/16 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python数值基础知识浅析
2019/11/19 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
城建学院毕业生自荐信
2014/01/31 职场文书
社区八一活动方案
2014/02/03 职场文书
小学生操行评语大全
2014/04/22 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
学校节能减排方案
2014/06/13 职场文书
先进党员事迹材料
2014/12/24 职场文书
水电施工员岗位职责
2015/04/11 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
Python WSGI 规范简介
2021/04/11 Python
Golang 链表的学习和使用
2022/04/19 Golang