我尝试了以下检查数据类型(特别是整数),但没有工作。
var i = "5";
if(Number(i) = 'NaN')
{
console.log('This is not number'));
}
我尝试了以下检查数据类型(特别是整数),但没有工作。
var i = "5";
if(Number(i) = 'NaN')
{
console.log('This is not number'));
}
我想到了两种测试值类型的方法:
方法一:
您可以使用isNaN
javascript 方法,该方法确定值是否为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) 提案的一部分,因此不同供应商并不广泛且完全支持。
我以这种方式使用它并且工作正常
quantity=prompt("Please enter the quantity","1");
quantity=parseInt(quantity);
if (!isNaN( quantity ))
{
totalAmount=itemPrice*quantity;
}
return totalAmount;
我刚刚在 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));
}
您的逻辑是正确的,但显然每个人都错过了 2 个错误:
只需更改if(Number(i) = 'NaN')
为if(Number(i) == NaN)
NaN
是一个常数,你应该使用双等号来比较,一个单一的用于为变量赋值。
你可以试试这个isNaN(Number(x))
,其中 x 是字符串或数字之类的任何东西
您可以通过检查其构造函数来检查您的号码。
var i = "5";
if( i.constructor !== Number )
{
console.log('This is not number'));
}
如果您想知道 "1" ou 1 是否可以转换为数字,可以使用以下代码:
if (isNaN(i*1)) {
console.log('i is not a number');
}
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!");
}