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:void(0)的真正含义实例分析
Aug 20 Javascript
javascript 写类方式之八
Jul 05 Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
javascript实现控制div颜色
Jul 07 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
Nov 23 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
JavaScript中this用法学习笔记
Mar 17 Javascript
详解uniapp的全局变量实现方式
Jan 11 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
提问的智慧(2)
2006/10/09 PHP
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
javascript代码加载优化方法
2011/01/30 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
python import 上级目录的导入
2020/11/03 Python
python推导式的使用方法实例
2021/02/28 Python
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
德国家具在线:Fashion For Home
2017/03/11 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
爱国电影观后感
2015/06/19 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
2016新年感言
2015/08/03 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers