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 相关文章推荐
风吟的小型JavaScirpt库 (FY.JS).
Mar 09 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
jQuery之尺寸调整组件的深入解析
Jun 19 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
手机端页面rem宽度自适应脚本
May 20 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
jquery实现图片预加载
Dec 25 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
详细分析JS函数去抖和节流
Dec 05 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
微信小程序中如何计算距离某个节日还有多少天
Jul 15 Javascript
vue 集成jTopo 处理方法
Aug 07 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/04/21 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
jQuery动态添加
2016/04/07 Javascript
Angular的$http与$location
2016/12/26 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
django 实现简单的插入视频
2020/04/07 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
"序列点" 是什么
2016/07/29 面试题
成教自我鉴定
2013/10/27 职场文书
培训演讲稿范文
2014/01/12 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
质量标语大全
2014/06/12 职场文书
简单租房协议书
2014/10/21 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书