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

开发 前端
当我们打算对数字进行操作时,如果对字符串或数组进行操作会带来奇怪的结果。在本文中,我们将研究可以帮我们确定所用的变量是否为数字的各种函数。

介绍

JavaScript 是一种动态类型的语言,这意味着解释器是在运行时确定变量类型的。这允许我们可以用同一变量中存储不同类型的数据。但是如果没有文档和保持一致性,在使用代码时,我们很有可能并不知道变量究竟是哪种类型。

[[344002]]

当我们打算对数字进行操作时,如果对字符串或数组进行操作会带来奇怪的结果。在本文中,我们将研究可以帮我们确定所用的变量是否为数字的各种函数。

字符串形式的数字例如 "100" 不应该被处理,同时在 JavaScript中 NaN,Infinity 和 -Infinity 之类的特殊值也都是数字,不过我们将忽略这些值。

根据这些要求,最好使用 Number 对象内置 isFinite() 函数。但是有时候我们也会使用其他函数,例如 Number.isNaN() 和 typeof() 等。

首先创建一些测试变量:

  1. let intVar = 2
  2. let floatVar = 10.5; 
  3. let stringVar = '4'
  4. let nanVar = NaN
  5. let infinityVar = Infinity
  6. let nullnullVar = null; 
  7. let undefinedundefinedVar = undefined; 

使用Number.isFinite()函数

Number.isFinite() 用来函数检查变量是否为数字,但也用来检查其是否为某些特殊值。它在遇到 NaN, Infinity 或者 -Infinity 时会返回 false。

接下来在上面定义的变量上进行测试:

  1. > Number.isFinite(intVar); 
  2. true 
  3. > Number.isFinite(floatVar); 
  4. true 
  5. > Number.isFinite(stringVar); 
  6. false 
  7. > Number.isFinite(nanVar); 
  8. false 
  9. > Number.isFinite(infinityVar); 
  10. false 
  11. > Number.isFinite(nullVar); 
  12. false 
  13. > Number.isFinite(undefined); 
  14. false 

结果令人满意。特殊的数字值以及所有非数字类型的变量都将会被忽略。如果想要检查某个变量是否为数字, Number.isFinite() 函数是最好的选择。

使用Number.isNaN()函数

标准的 Number 对象具有 isNaN() 方法。用来判断传入的参数值是否为 NaN。由于我们要检查变量是否为数字,所以需要在检查中要使用非运算符 !。

现在看看通过非运算符加 Number.isNaN() 函数能否只过滤数字:

  1. > !Number.isNaN(intVar); 
  2. true 
  3. > !Number.isNaN(floatVar); 
  4. true 
  5. > !Number.isNaN(stringVar); 
  6. true # 判断错误 
  7. > !Number.isNaN(nanVar); 
  8. false 
  9. > !Number.isNaN(infinityVar); 
  10. true # 判断错误 
  11. > !Number.isNaN(nullVar); 
  12. true # 判断错误 
  13. > !Number.isNaN(undefinedVar); 
  14. true # 判断错误 

这种方法相当宽松,因为它接受的值根本不是数字。这种方法最适合在你知道自己的值是数字并且要检查它是否为 NaN 值的情况下,并不适合常规数字的。

使用typeof()函数

typeof() 函数是一个全局函数,它的参数可以接受变量或值,并返回其类型的字符串表示形式。JavaScript 共有 9 种类型:

  • undefined
  • boolean
  • number
  • string
  • bigint
  • symbol
  • object
  • null (typeof() 显示为对象)
  • function (对象的一种特殊类型)

为了验证变量是否为数字,我们只需要检查 typeof() 返回的值是否为 "number"。让我们尝试一下测试变量:

  1. > typeof(intVar) == 'number'; 
  2. true 
  3. > typeof(floatVar) == 'number'; 
  4. true 
  5. > typeof(stringVar) == 'number'; 
  6. false 
  7. > typeof(nanVar) == 'number'; 
  8. true # 判断错误 
  9. > typeof(infinityVar) == 'number'; 
  10. true # 判断错误 
  11. > typeof(nullVar) == 'number'; 
  12. false 
  13. > typeof(undefined) == 'number'; 
  14. false 

typeof() 函数比 Number.isNaN() 好得多。它可以正确的判断 null 和 undefined 不是数字。但如果是 NaN 和 Infinity,它会返回 true。

尽管从技术角度上来说这是正确的,但 NaN 和 Infinity 是特殊的数字值,我们在大多数情况下都会忽略它们。

总结

本文研究了如何检查 JavaScript 中的变量是否为数字。

  • 只有在我们知道自己的变量是一个数字,并且需要验证它是否为 NaN 时,Number.isNaN() 函数才适用。
  • 如果你的代码需要处理 NaN,Infinity 或 -Infinity 及其他数字时,则 typeof() 函数是适用的。
  • Number.isFinite() 方法能够处理特殊数字,并且最适合我们的要求。

 

责任编辑:赵宁宁 来源: 前端先锋
相关推荐

2020-10-22 08:06:05

JavaScrip语言类型

2020-10-22 14:00:31

JavaScript数字变量

2020-08-18 08:32:05

JS ES6数组

2011-04-25 11:05:10

javascript

2020-08-19 08:29:22

JavaScript 对象函数

2021-01-28 07:52:39

JS数组变量

2022-08-25 14:48:11

变量前端

2021-05-07 16:19:36

异步编程Java线程

2010-09-25 14:48:55

SQL连接

2021-01-19 11:56:19

Python开发语言

2021-08-02 11:13:28

人工智能机器学习技术

2010-11-24 09:56:20

mysql拷贝表

2021-10-07 20:36:45

Redis集群场景

2023-09-07 13:21:00

Linux软件

2023-02-08 08:43:55

前端继承原型

2021-06-16 07:02:22

Python方式邮件

2023-10-25 18:18:10

Python脚本代码

2010-07-30 09:16:24

Flex数据绑定

2017-06-13 10:30:20

oracle连接命名

2010-08-05 09:39:17

Flex页面跳转
点赞
收藏

51CTO技术栈公众号