JavaScript是一门动态类型的语言,解释器在运行的时候才确定变量的类型。
在JavaScript中NaN
,Infinity
和-Infinity都是数字类型的。
根据这些要求,最好使用的函数是内置Number
对象中的isFinite()
函数或正则表达式。但是,大多人平常会使用其他函数,如Number.isNaN()
和typeof()
函数。
#创建一些变量,下面我们分别用Number.isFinite()、Number.isNaN()、typeof()、正则去验证;
let intVar = 2; let floVar = 2.1; let strVar = "2.1"; let nanVar = NaN; let infinityVar = Infinity; let nullVar = null; let undefinedVar = undefined;
let str = "";
使用Number.isFinite()函数名。
Number.isFinite()
函数检查变量是否为数字,还检查其是否为有限值。 因此,对于NaN
,Infinity
或-Infinity
的数字,它返回false
。
用上面定义的变量检验一下
> Number.isFinite(intVar); true > Number.isFinite(floVar); true > Number.isFinite(strVar); false > Number.isFinite(nanVar); false > Number.isFinite(infinityVar); false > Number.isFinite(nullVar); false > Number.isFinite(undefined); false
> Number.isFinite(str);
false
使用Number.isNaN()方法。
> !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
> !Number.isNaN(str);
true # Wrong
使用typeof()
> 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(str) == 'number';
false
使用正则表达式
let reg = /^(-)?[0-9]+.?[0-9]*$/;
reg.test(intVar);
true
reg.test(floVar);
true
reg.test(strVar);
true
reg.test(nanVar);
false
reg.test(nullVar);
false
reg.test(undefinedVar);
false
reg.test(str)
false
总结
在本文中,我们学习了如何检查JavaScript中的变量是否为数字。 Number.isNaN()函数仅在我们知道变量为数字并且需要验证它是否为
NaN`时才适用。
如果代码中有NaN
,Infinity
或-Infinity
以及其他数字,则 typeof()`函数适用。
Number.isFinite()
方法捕获所有有限数,是最适合我们的要求。
正则在不区分数字或字符串时表现也不错