如何检查节点js中的数据types – 专门用于整数

我尝试以下检查数据types(专门为整数),但不能正常工作。

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

我想了两种方法来testing一个值的types:

方法1:

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

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

不会返回任何东西。 为此,更好的select是方法2。

方法2:

您可以使用javascript typeof方法来testingvariables或值的types

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

请注意,我使用双等号运算符,因为在这种情况下,值的types是一个string,但JavaScript内部将转换为数字。

将值强制为数字types的更强大的方法是使用作为新的Ecmascript 6(和谐)提案的一部分的Number.isNaN,因此不被不同的供应商广泛支持。

我用这种方式,它的工作正常

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

你的逻辑是正确的,但你有两个错误,显然每个人都错过了:

if(Number(i) = 'NaN')改为if(Number(i) == NaN)

NaN是一个常数,你应该使用等号来比较,一个单一的是用来赋值给variables。

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

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

惊喜是第一个NaN的types是“数字”,但这是如何定义在JavaScript中。

所以下一个testing会带来意想不到的结果

 > typeof Number("hello") "number" 

因为Number(“你好”)是NaN

以下函数按预期得到结果:

 function isNumeric(n){ return (typeof n == "number" && !isNaN(n)); } 

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

如果您想知道是否可以将“1”或“1”转换为数字,则可以使用以下代码:

 if (isNaN(i*1)) { console.log('i is not a number'); }