检查 JavaScript 变量是否为数字的几种方式

前端小混混 前端先锋

介绍


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() 方法能够处理特殊数字,并且最适合我们的要求。
©著作权归作者所有:来自51CTO博客作者mb5ff59354dd96e的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 万字长文!剑指offer全题解思路汇总
  2. PHP基础知识:变量类型检测和转换以及常量和预定义变量
  3. php的变量&常量
  4. 初识PHP变量与常量
  5. PHP变量数据类型,变量和常量的定义以及数据类型的检测
  6. php变量和常量
  7. php数据类型转换及变量与常量的差别
  8. 数据类型的转换与检测技术 、变量声明与常用声明的方式与使用
  9. 数据类型转换的一般操作与检测正确性,变量常量定义及操作注意事项

随机推荐

  1. Go语言并发机制图文详解
  2. go语言查看环境信息的方法
  3. golang context用来干吗
  4. 在go modules里使用go get进行包管理的介
  5. Go生成go动态库或静态库的方法
  6. golang channel有什么好处
  7. golang channel是什么
  8. go中的数据结构-字典map详解
  9. Golang Cgo是什么
  10. go中的数据结构-接口interface(详解)