检查 JavaScript 变量是否为数字的几种方式
// 每日前端夜话 第405篇
// 正文共:1100 字
// 预计阅读时间:5 分钟
介绍
JavaScript 是一种动态类型的语言,这意味着解释器是在运行时确定变量类型的。这允许我们可以用同一变量中存储不同类型的数据。但是如果没有文档和保持一致性,在使用代码时,我们很有可能并不知道变量究竟是哪种类型。
当我们打算对数字进行操作时,如果对字符串或数组进行操作会带来奇怪的结果。在本文中,我们将研究可以帮我们确定所用的变量是否为数字的各种函数。
字符串形式的数字例如 "100"
不应该被处理,同时在 JavaScript中 NaN
,Infinity
和 -Infinity
之类的特殊值也都是数字,不过我们将忽略这些值。
根据这些要求,最好使用 Number
对象内置 isFinite()
函数。但是有时候我们也会使用其他函数,例如 Number.isNaN()
和 typeof()
等。
首先创建一些测试变量:
let intVar = 2;
let floatVar = 10.5;
let stringVar = '4';
let nanVar = NaN;
let infinityVar = Infinity;
let nullVar = null;
let undefinedVar = undefined;
使用 Number.isFinite() 函数
Number.isFinite()
用来函数检查变量是否为数字,但也用来检查其是否为某些特殊值。它在遇到 NaN
, Infinity
或者 -Infinity
时会返回 false
。
接下来在上面定义的变量上进行测试:
> Number.isFinite(intVar);
true
> Number.isFinite(floatVar);
true
> Number.isFinite(stringVar);
false
> Number.isFinite(nanVar);
false
> Number.isFinite(infinityVar);
false
> Number.isFinite(nullVar);
false
> Number.isFinite(undefined);
false
结果令人满意。特殊的数字值以及所有非数字类型的变量都将会被忽略。如果想要检查某个变量是否为数字, Number.isFinite()
函数是最好的选择。
使用 Number.isNaN() 函数
标准的 Number
对象具有 isNaN()
方法。用来判断传入的参数值是否为 NaN
。由于我们要检查变量是否为数字,所以需要在检查中要使用非运算符 !
。
现在看看通过非运算符加 Number.isNaN()
函数能否只过滤数字:
> !Number.isNaN(intVar);
true
> !Number.isNaN(floatVar);
true
> !Number.isNaN(stringVar);
true # 判断错误
> !Number.isNaN(nanVar);
false
> !Number.isNaN(infinityVar);
true # 判断错误
> !Number.isNaN(nullVar);
true # 判断错误
> !Number.isNaN(undefinedVar);
true # 判断错误
这种方法相当宽松,因为它接受的值根本不是数字。这种方法最适合在你知道自己的值是数字并且要检查它是否为 NaN
值的情况下,并不适合常规数字的。
使用 typeof() 函数
typeof()
函数是一个全局函数,它的参数可以接受变量或值,并返回其类型的字符串表示形式。JavaScript 共有 9 种类型:
undefined
boolean
number
string
bigint
symbol
object
-
null
(typeof()
显示为对象) -
function
(对象的一种特殊类型)
为了验证变量是否为数字,我们只需要检查 typeof()
返回的值是否为 "number"
。让我们尝试一下测试变量:
> typeof(intVar) == 'number';
true
> typeof(floatVar) == 'number';
true
> typeof(stringVar) == 'number';
false
> typeof(nanVar) == 'number';
true # 判断错误
> typeof(infinityVar) == 'number';
true # 判断错误
> typeof(nullVar) == 'number';
false
> typeof(undefined) == 'number';
false
typeof()
函数比 Number.isNaN()
好得多。它可以正确的判断 null
和 undefined
不是数字。但如果是 NaN
和 Infinity
,它会返回 true。
尽管从技术角度上来说这是正确的,但 NaN
和 Infinity
是特殊的数字值,我们在大多数情况下都会忽略它们。
总结
本文研究了如何检查 JavaScript 中的变量是否为数字。
- 只有在我们知道自己的变量是一个数字,并且需要验证它是否为
NaN
时,Number.isNaN()
函数才适用。 - 如果你的代码需要处理
NaN
,Infinity
或-Infinity
及其他数字时,则typeof()
函数是适用的。 -
Number.isFinite()
方法能够处理特殊数字,并且最适合我们的要求。
- ASP.NET 2.0加密Web.config 配置文件
- .Net 跨平台可移植类库正在进行
- 掌握机器学习数学基础之概率统计(三)
- IBatisNet 之 自动生成主关键字
- IBatisNet之获取和操作SQL语句
- 大数据研究学者谈城市运行安全:要将应急处置转化为风险管理
- Castle.MVC框架介绍
- 在 .Net 设定 proxy 的方法
- MVC结构简介
- 优酷、爱奇艺、摩拜……多家网络平台被曝注册容易注销难!面临个人隐私泄露风险
- WordPress中借助.htaccess屏蔽某个IP或某个IP段(防垃圾评论)
- ASP.NET 调味品:AJAX
- CTreeCtrl 控件使用总结
- 高盛成立交易部门,涉足比特币和加密货币交易
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python scrapy爬虫练习(1) 爬取豆瓣电影top250信息
- python爬虫 senlenium爬取拉勾网招聘数据
- Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
- 简单又强大的pandas爬虫 利用pandas库的read_html()方法爬取网页表格型数据
- python pyecharts数据可视化 折线图 箱形图
- Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息
- python 办公自动化系列 (1) 从22053条数据中统计断网次数并计算平均断网时间
- Python数据可视化 热力图
- python 中文情感分析 Snownlp库的使用
- Python数据分析实战(1) 成都土地市场分析
- 51单片机学习(1) LED点亮、闪烁以及流水灯实现
- python pyecharts地理数据可视化 绘制地理图表
- Python 爬虫+tkinter界面 实现历史天气查询
- python opencv+pytesseract 验证码识别
- python+opencv 实现图像人脸检测及视频中的人脸检测