30

我尝试了以下检查数据类型(特别是整数),但没有工作。

var i = "5";

if(Number(i) = 'NaN')
{
 console.log('This is not number'));
}
4

8 回答 8

57

我想到了两种测试值类型的方法:

方法一:

您可以使用isNaNjavascript 方法,该方法确定值是否为NaN。但是因为在您的情况下,您正在测试一个转换为字符串的数值,所以 Javascript 试图猜测该值的类型并将其转换为数字 5 而不是NaN. 这就是为什么如果你console.log输出结果,你会惊讶于代码:

if (isNaN(i)) {
    console.log('This is not number');
}

不会返回任何东西。因此,更好的替代方法是方法 2。

方法二:

您可以使用 javascript typeof方法来测试变量或值的类型

if (typeof i != "number") {
    console.log('This is not number');
}

请注意,我使用的是双等号运算符,因为在这种情况下,值的类型是字符串,但 Javascript 内部将转换为数字。

将值强制为数字类型的一种更强大的方法是使用Number.isNaN,它是新 Ecmascript 6 (Harmony) 提案的一部分,因此不同供应商并不广泛且完全支持。

于 2013-09-27T11:02:18.013 回答
7

我以这种方式使用它并且工作正常

quantity=prompt("Please enter the quantity","1");
quantity=parseInt(quantity);
if (!isNaN( quantity ))
{
    totalAmount=itemPrice*quantity;

}
return totalAmount;
于 2013-09-27T10:39:27.487 回答
4

我刚刚在 node.js v4.2.4 中做了一些测试(但在任何 javascript 实现中都是如此):

> typeof NaN
'number'
> isNaN(NaN)
true
> isNaN("hello")
true

令人惊讶的是第一个,因为 NaN 的类型是“数字”,但这就是它在 javascript 中的定义方式。

所以下一个测试带来了意想不到的结果

> typeof Number("hello")
"number"

因为 Number("hello") 是 NaN

以下函数使结果符合预期:

function isNumeric(n){
  return (typeof n == "number" && !isNaN(n));
}
于 2016-01-17T20:57:06.403 回答
2

您的逻辑是正确的,但显然每个人都错过了 2 个错误:

只需更改if(Number(i) = 'NaN')if(Number(i) == NaN)

NaN是一个常数,你应该使用等号来比较,一个单一的用于为变量赋值。

于 2015-10-06T20:12:13.350 回答
1

你可以试试这个isNaN(Number(x)) ,其中 x 是字符串或数字之类的任何东西

于 2016-09-14T06:06:31.023 回答
1

您可以通过检查其构造函数来检查您的号码。

var i = "5";

if( i.constructor !== Number )
{
 console.log('This is not number'));
}
于 2019-05-01T13:13:34.000 回答
0

如果您想知道 "1" ou 1 是否可以转换为数字,可以使用以下代码:

if (isNaN(i*1)) {
     console.log('i is not a number'); 
}
于 2016-11-23T15:14:00.650 回答
0

var val = ... //the value you want to check
if(Number.isNaN(Number(val))){
  console.log("This is NOT a number!");
}else{
  console.log("This IS a number!");
}

于 2019-04-15T12:15:05.480 回答