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 相关文章推荐
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
js动态设置鼠标事件示例代码
Oct 30 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
js实现select下拉框菜单
Dec 08 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
Oct 15 Javascript
js实现无缝轮播图特效
May 09 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设置编码格式的方法
2013/03/05 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
php实现学生管理系统
2020/03/21 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
图片按比例缩放函数
2006/06/26 Javascript
学习jquery之一
2007/04/27 Javascript
用js生产批量批处理执行命令
2008/07/28 Javascript
Dojo 学习要点
2010/09/03 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
jQuery使用方法
2017/02/04 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
numpy 计算两个数组重复程度的方法
2018/11/07 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
专科毕业生自我鉴定
2013/12/01 职场文书
好的演讲稿开场白
2013/12/30 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
离婚协议书范文2016
2016/03/18 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
MySQL 数据库范式化设计理论
2022/04/22 MySQL