当前位置:  开发笔记 > 编程语言 > 正文

检查变量是否包含Javascript中的数值?

如何解决《检查变量是否包含Javascript中的数值?》经验,为你挑选了3个好方法。

在PHP中,它非常简单:

is_numeric(23);//true
is_numeric("23");//true
is_numeric(23.5);//true
is_numeric(true);//false

但是我如何在Javascript中执行此操作?我可以使用正则表达式,但是有一个函数吗?



1> CMS..:

关于什么:

function isNumber(n){
    return typeof(n) != "boolean" && !isNaN(n);
}

该isNaN内置函数用来检查一个值不是一个数字.

更新: Christoph是正确的,在JavaScript中布尔类型可以转换为Number,返回1表示true,0表示false表示错误,因此如果评估1 + true结果将为2.

考虑到这种行为,我更新了函数以防止将布尔值转换为其数字表示.



2> Christoph..:

我认为到目前为止的任何建议都没有实际发挥作用.例如

!isNaN(parseFloat(foo))

不会因为parseFloat()忽略尾随的非数字字符.

要解决此问题,您可以将返回值与强制转换返回的值进行比较Number()(或者等效地使用一元+,但我更喜欢显式转换):

parseFloat(foo) === Number(foo)

如果这两个函数返回这将仍然有效NaN,因为NaN !== NaNtrue.

另一种可能性是首先转换为字符串,然后编号然后检查NaN,即

!isNaN(Number(String(foo)))

或等效,但不太可读(但最有可能更快)

!isNaN(+('' + foo))

如果要排除无穷大值,请使用isFinite()而不是!isNaN(),即

isFinite(Number(String(foo)))

显式转换通道Number()实际上是不必要的,因为isNan()并且isFinite()隐式地转换为数字 - 这就是为什么!isNaN()不起作用的原因!

在我看来,最合适的解决方案是

isFinite(String(foo))

正如Matthew指出的那样,第二种方法不处理只包含正确空格的字符串.

修复起来并不难 - 使用Matthew评论中的代码或

isFinite(String(foo).trim() || NaN)

你必须决定,如果这仍然不是比较的结果更好的parseFloat()Number().



3> Bryan Kyle..:

要检查javascript中的类型,您可以使用typeof运算符:

js> var x = 1;
js> typeof(x);
number

所以:

if (typeof(x) === 'number') {
   // Do something
}

如果要将变量的值强制转换为整数,可以使用parseInt(x, 10)将该值解析为基数为10的整数.同样,parseFloat如果需要浮点值,则可以使用.然而,这些总是会强制不论类型,以便传递null,true等总是会返回一个数字.但是,您可以通过呼叫检查其是否为有效号码isNaN.

所以,把它们放在一起:

!isNaN(parseFloat(23)) // true
!isNaN(parseFloat('23')) // true
!isNaN(parseFloat(23.5)) // true
!isNaN(parseFloat(true)) // false

要么

function isNumber(x) {
    return !isNaN(parseFloat(x));
}

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有