检查变量是否为数字

38

如何检查一个变量是数字,可以是整数或字符串数字?

在PHP中,我可以这样做:

if (is_int($var)) {
    echo '$var is integer';
}

或者:

if (is_numeric($var)) {
    echo '$var is numeric';
}

如何在jQuery / JavaScript中实现此功能?


我猜你是想避免往返服务器测试的吧?那样做确实非常简单粗暴 ;) - Will Bickford
10个回答

45

JavaScript函数isNaN(variable)可以解决问题。它返回true,如果数据不是数字。


这是一个好建议。顺便说一下,这是因为字符串会被隐式转换为数字 - 显式代码是:isNaN(new Number(variable))。请注意,如果您希望将代码限制为整数,则 parseInt() 将返回 NaN(可通过 isNaN() 进行测试)。但要注意,parseInt() 会快乐地忽略字符串末尾的非数字字符。 - Shog9
1
这段代码将接受任何可以转换为数字的内容,包括布尔值和 'infinity';最好使用 isFinite(String(foo)) - Christoph
4
不要使用isNaN,它有问题。请参考https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isNaN,并使用@Christoph提出的解决方案。 - nullability

27

我会选择

isFinite(String(foo))

查看此答案以了解其原因。如果您只想接受整数值,请参阅此处


7
注意这个问题:isFinite(null) === true - Ryan Kirkman
1
isFinite("100") 是 true,我们想知道一个对象是否是 Number 对象。从我的简短测试来看,这里的解决方案(Object.prototype.toString.call(obj) === "[object Number]")是最好的:https://dev59.com/Q3M_5IYBdhLWcg3wn0hO - Skystrider
1
也会对空字符串返回true,但我不认为它是一个“数字”。 - Balmipour
如果传递NaN,则Object.prototype.toString.call(obj) === "[object Number]"将返回true。 - Luoruize
1
不处理所有变量:isFinite(String(" ")) == isFinite(String("\t")) == isFinite(String("")) == true。请参见链接的答案。 - cdosborn
我认为Number.isFinite()是你想要的。它能正确处理null'' - dlsso

13

我对JavaScript还比较陌生,但是似乎typeof(blah)可以用来检查某个东西是否为数字(如果是字符串则返回false)。虽然OP要求的是字符串和数字,但我认为这可能值得记录下来以便其他人参考。

例如:

function isNumeric(something){
    return typeof(something) === 'number';
}

这里是文档

另外,以下是一些typeof产生的控制台运行结果:

typeof(12);
"number"
typeof(null);
"object"
typeof('12');
"string"
typeof(12.3225);
"number"  

我知道的一个小怪事是

typeof(NaN);
"number"

但如果没有这样的东西,JavaScript就不会是 JavaScript了,对吧?!


1
使用typeof(something) == 'number'比较符号更符合JS的风格。使用==而不是===。只有在你真正需要时才使用=== - Adam Chalcraft
3
@AdamChalcraft 大多数代码检查器/程序员可能会持相反的观点 - 除非有充分的理由,否则始终使用 ===,如果你习惯使用 ==,在某些时候会遇到一些奇怪的问题。在这种情况下,没有进行类型强制转换,因此无论如何都是一个相当无关紧要的问题。如果您想对此进行教育性(同时也很有趣)的演讲,请查看詹姆斯·米肯斯的《To wash it all away》http://scholar.harvard.edu/files/mickens/files/towashitallaway.pdf。 - JonnyRaa

4
你应该使用:

您应该使用:

if(Number.isInteger(variable))
   alert("It is an integer");
else
   alert("It is not a integer");

您可以在以下网址中找到参考文档: Number.isInteger()


1
function isNumeric( $probe )
{
    return parseFloat( String( $probe ) ) == $probe;
}

1

你应该使用:

var x = 23;
var y = 34hhj;

isNaN(x); 
isNaN(y); 

如果它是字符串,它将返回 true;如果是数字,则返回 false。

0

0

typeof 运算符返回一个字符串,指示未计算操作数的类型。

const num = 42;
console.log(typeof num === "number"); // expected return true
if(typeof num === "number"){
   console.log("This is number")
}

更多关于它的信息......

console.log(typeof 42);
// expected output: "number"

console.log(typeof 'blubber');
// expected output: "string"

console.log(typeof true);
// expected output: "boolean"

console.log(typeof undeclaredVariable);
// expected output: "undefined"


0
请注意,空字符串''' '将被isNaNisFinite视为数字。

0

你应该使用

简单的方法通过使用“if条件”来检查给定的值是否为数字

function isInteger(value)      
{       
    num=value.trim();         
    return !(value.match(/\s/g)||num==""||isNaN(num)||(typeof(value)=='number');        
}

如果传递的值是整数,它将返回true。

solved for     
value=""      //false null     
value="12"    //true only integers       
value="a"     //false     
value=" 12"   //false      
value="12 "   //false         
value=" "     //false space        
value="$12"   //false special characters 
value="as12"    //false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接