简介
JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总是知道变量的类型。
当我们期望一个变量是数字时,对字符串或数组进行操作可能会在代码中导致奇怪的结果。在本文中,我们将会介绍一些判断变量是否为数字的函数。
像"10"之类的数字的字符串不应被接受。在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(intVar);
- true
- > !Number.isNaN(floatVar);
- true
- > !Number.isNaN(stringVar);
- true # Wrong
- > !Number.isNaN(nanVar);
- false
- > !Number.isNaN(infinityVar);
- true # Wrong
- > !Number.isNaN(nullVar);
- true # Wrong
- > !Number.isNaN(undefinedVar);
- true # Wrong
这个方法是相当宽松的,因为它接受根本不是数字的值。这种方法最适合于当你知道你有一个数字并且要检查它是否是一个NaN值时,而不是一般的数字检查。
使用 typeof() 方法
typeof()函数是一个全局函数,它接受变量或值作为参数,并返回其类型的字符串表示。JavaScript 总共有9种类型
- undefined
- boolean
- number
- string
- bigint
- symbol
- object
- null (typeof() 显示的是 object)
- function (一种特殊类型的 object)
为了验证变量是否为数字,我们只需要检查typeof()返回的值是否为`"number"。让我们尝试一下测试变量:
- > typeof(intVar) == 'number';
- true
- > typeof(floatVar) == 'number';
- true
- > typeof(stringVar) == 'number';
- false
- > typeof(nanVar) == 'number';
- true # Wrong
- > typeof(infinityVar) == 'number';
- true # Wrong
- > typeof(nullVar) == 'number';
- false
- > typeof(undefined) == 'number';
- false
typeof()函数的性能比Number.isNaN()要好得多。它正确地确定了字符串变量null和undefined不是数字。但是,对于NaN和Infinity,它返回true。
尽管从技术上来说这是正确的结果,但NaN和Infinity是特殊的数字值,对于大多数使用情况,我们宁愿忽略它们。
总结
在本文中,我们学习了如何检查JavaScript中的变量是否为数字。Number.isNaN()函数仅在我们知道变量为数字并且需要验证它是否为NaN`时才适用。
如果代码中有NaN,Infinity或-Infinity以及其他数字,则 typeof()`函数适用。
Number.isFinite()方法捕获所有有限数,是最适合我们的要求。