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 面向对象特性
Dec 28 Javascript
利用函数的惰性载入提高javascript代码执行效率
May 05 Javascript
jQuery中not()方法用法实例
Jan 06 Javascript
深入学习JavaScript中的Rest参数和参数默认值
Jul 28 Javascript
JavaScript中日期的相关操作方法总结
Oct 24 Javascript
js获取浏览器和屏幕的各种宽度高度
Feb 22 Javascript
js实现3D图片环展示效果
Mar 09 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
Jan 23 Javascript
Vue 表情包输入组件的实现代码
Jan 21 Javascript
解决vue自定义全局消息框组件问题
Nov 22 Javascript
js实现简单的贪吃蛇游戏
Apr 23 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 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向socket服务器收发数据的方法
2015/01/24 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
全面理解闭包机制
2016/07/11 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Python实现打印实心和空心菱形
2019/11/23 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python如何随机生成高强度密码
2020/08/19 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
抽象类和接口的区别
2012/09/19 面试题
消防安全检查制度
2014/02/04 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
2015教师年度考核评语
2015/03/25 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
Python语言中的数据类型-序列
2022/02/24 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android