JavaScript 中如何判断变量是否为数字

JavaScript 中如何判断变量是否为数字简介JavaScript是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总是知道变量的类型。当我们期望一个变量是数字时,对字符串或数组进行操作可能会在代码中导致奇怪的结果。在本文中,我们将会介绍一些判断变量是否为数字的函数。像”10″之类的数字的字符串不应被接受。在JavaScript中,诸如NaN,Infinity和-Infinity之类的特殊值也是数字类型的。根据这些要求,

大家好,又见面了,我是你们的朋友全栈君。

简介

JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总是知道变量的类型。

当我们期望一个变量是数字时,对字符串或数组进行操作可能会在代码中导致奇怪的结果。在本文中,我们将会介绍一些判断变量是否为数字的函数。

"10"之类的数字的字符串不应被接受。在JavaScript中,诸如NaNInfinity-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()函数检查变量是否为数字,还检查其是否为有限值。因此,对于NaNInfinity-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 #

这个方法是相当宽松的,因为它接受根本不是数字的值。这种方法最适合于当你知道你有一个数字并且要检查它是否是一个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()要好得多。它正确地确定了字符串变量nullundefined不是数字。但是,对于NaNInfinity,它返回true

尽管从技术上来说这是正确的结果,但NaNInfinity是特殊的数字值,对于大多数使用情况,我们宁愿忽略它们。

总结

在本文中,我们学习了如何检查JavaScript中的变量是否为数字。Number.isNaN()函数仅在我们知道变量为数字并且需要验证它是否为NaN时才适用。

如果代码中有NaNInfinity-Infinity以及其他数字,则 typeof()函数适用。

Number.isFinite()方法捕获所有有限数,是最适合我们的要求。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150694.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstorm-激活码(破解版激活)[通俗易懂]

    phpstorm-激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    60
  • python如何使用for循环_Python 中for循环的应用

    python如何使用for循环_Python 中for循环的应用1.for…in循环循环,遍历,迭代都是指把容器中的数据一个一个获取出来lst=[1,2,3,4,5]i=0whilei<len(lst): print(lst[i]) i+=1 #无法用while它的索引下标获取集合其中的值;setvar={“a”,”b”,”c”}for..in..应用而生语法:for变量in可迭代对象: code…可迭代对象(通常用到的是:容器类型数据,range对象,迭代器)2

    2022年8月12日
    9
  • Java文件读写

    Java文件读写1.%g用于输出科学计数法2.用printf输出换行除了’\n’,还可以用’%n’3.File类的几个构造方法:1)File(StringdirectoryPath)2)File(StringdirectoryPath,Stringfilename)3)File(FiledirObj,Stringfilename)4)File(URIuri)注意,这里的对象指的可能是一个…

    2022年7月14日
    14
  • java 自动补全_eclipse自动补全的设置[通俗易懂]

    java 自动补全_eclipse自动补全的设置[通俗易懂]如果你用过VisualStudio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望。但是eclipse其实是非常强大的,eclipse的自动补全没有VS那么好是因为eclipse的补全功能用的是默认设置。你只需要稍微修改一下就行了。最简单的修改方式是:Windows——>Preferences——>Java–>Editor–>Content…

    2022年10月8日
    1
  • Tomcat优化详细教程

    Tomcat是我们经常使用的servlet容器之一,甚至很多线上产品都使用Tomcat充当服务器。而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化。      一、内存优化    默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况。即使是本文中的这个只有

    2022年4月3日
    43
  • NB-IoT应用场景_iot框架

    NB-IoT应用场景_iot框架NB-IOT实现万物互联设计思路分享(固定上报类)NB-IOT窄带物联网(NarrowBandInternetofThings,NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术。NB-IOT作为近年大火的一项物联网技术,因为其特性受到了众多行业众多企业的青睐。其广覆盖,大连接,低功耗,低成本的四大主要特点符合众多行业的实现物联网平滑过度的要求,成为了物联网技术又一代宠儿。本人也…

    2022年9月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号