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 Distilled 基础知识与函数
Apr 07 Javascript
THREE.JS入门教程(3)着色器-下
Jan 24 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
Feb 25 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
javascript随机显示背景图片的方法
Jun 18 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
JavaScript的词法结构精华篇
Oct 17 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
React自定义hook的方法
Jun 25 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
PHP之COOKIE支持详解
2010/09/20 PHP
用PHP代码给图片加水印
2015/07/01 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
js实现筛选功能
2020/11/24 Javascript
Python 修改列表中的元素方法
2018/06/26 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
大学生志愿者感言
2014/01/15 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
学校宣传标语
2014/06/18 职场文书
新闻人物通讯稿
2014/10/09 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS