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学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
非常棒的10款jQuery 幻灯片插件
Jun 14 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
axios学习教程全攻略
2017/03/26 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
react的hooks的用法详解
2020/10/12 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
玩转python爬虫之URLError异常处理
2016/02/17 Python
python验证码识别的实例详解
2016/09/09 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
python for和else语句趣谈
2019/07/02 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
自我鉴定范文
2013/11/10 职场文书
求职自荐书范文
2013/12/04 职场文书
学生党员思想汇报
2013/12/28 职场文书
单位消防安全制度
2014/01/12 职场文书
设计顾问服务计划书
2014/05/04 职场文书
个人工作主要事迹
2014/05/08 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
主持人开幕词
2015/01/29 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
Python绘制散乱的点构成的图的方法
2022/04/21 Python