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 相关文章推荐
jQuery Autocomplete自动完成插件
Jul 17 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
简单实现node.js图片上传
Dec 18 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
详解js常用分割取字符串的方法
May 15 Javascript
基于JS判断对象是否是数组
Jan 10 Javascript
JavaScript canvas绘制折线图
Feb 18 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
python绘制直线的方法
2018/06/30 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
质检部部长职责
2013/12/16 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
优秀教师个人总结
2015/02/11 职场文书
小学四年级作文之写景
2019/08/23 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技