在PHP中,它非常简单:
is_numeric(23);//true
is_numeric("23");//true
is_numeric(23.5);//true
is_numeric(true);//false
Run Code Online (Sandbox Code Playgroud)
但是我如何在Javascript中执行此操作?我可以使用正则表达式,但是有一个函数吗?
CMS*_*CMS 24
关于什么:
function isNumber(n){
return typeof(n) != "boolean" && !isNaN(n);
}
Run Code Online (Sandbox Code Playgroud)
该isNaN内置函数用来检查一个值不是一个数字.
更新: Christoph是正确的,在JavaScript中布尔类型可以转换为Number,返回1表示true,0表示false表示错误,因此如果评估1 + true结果将为2.
考虑到这种行为,我更新了函数以防止将布尔值转换为其数字表示.
Chr*_*oph 14
我认为到目前为止的任何建议都没有实际发挥作用.例如
!isNaN(parseFloat(foo))
Run Code Online (Sandbox Code Playgroud)
不会因为parseFloat()忽略尾随的非数字字符.
要解决此问题,您可以将返回值与强制转换返回的值进行比较Number()(或者等效地使用一元+,但我更喜欢显式转换):
parseFloat(foo) === Number(foo)
Run Code Online (Sandbox Code Playgroud)
如果这两个函数返回这将仍然有效NaN,因为NaN !== NaN是true.
另一种可能性是首先转换为字符串,然后编号然后检查NaN,即
!isNaN(Number(String(foo)))
Run Code Online (Sandbox Code Playgroud)
或等效,但不太可读(但最有可能更快)
!isNaN(+('' + foo))
Run Code Online (Sandbox Code Playgroud)
如果要排除无穷大值,请使用isFinite()而不是!isNaN(),即
isFinite(Number(String(foo)))
Run Code Online (Sandbox Code Playgroud)
显式转换通道Number()实际上是不必要的,因为isNan()并且isFinite()隐式地转换为数字 - 这就是为什么!isNaN()不起作用的原因!
在我看来,最合适的解决方案是
isFinite(String(foo))
Run Code Online (Sandbox Code Playgroud)
正如Matthew指出的那样,第二种方法不处理只包含正确空格的字符串.
修复起来并不难 - 使用Matthew评论中的代码或
isFinite(String(foo).trim() || NaN)
Run Code Online (Sandbox Code Playgroud)
你必须决定,如果这仍然不是比较的结果更好的parseFloat()和Number().
要检查javascript中的类型,您可以使用typeof运算符:
js> var x = 1;
js> typeof(x);
number
Run Code Online (Sandbox Code Playgroud)
所以:
if (typeof(x) === 'number') {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
如果要将变量的值强制转换为整数,可以使用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
Run Code Online (Sandbox Code Playgroud)
要么
function isNumber(x) {
return !isNaN(parseFloat(x));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22047 次 |
| 最近记录: |