2011-11-25 71 views
16

有一些奇怪的东西。isNaN()vs parseInt()混淆

为什么
isNaN("")我得到False

parseInt("")我得到NaN

+2

可能的重复http://stackoverflow.com/questions/825402/why-does-isnan-equal-false –

+0

因为'isNaN'不使用'parseInt'? –

+1

关键是要了解**类型转换**和**解析**,后面的'isNaN'之间的区别,将它的参数类型转换为'Number'类型,而'parseInt'将尝试*解析*提供的字符串。另见:http://stackoverflow.com/questions/4090518/string-to-int-use-parseint-or-number – CMS

回答

19

isNaN需要一个整数作为参数 - 因此JS转换""0

parseInt采用字符串作为参数 - 因此一个空字符串不是数字

+0

已经回答 - 重复http://stackoverflow.com/questions/825402/why-does-isnan -equal-false –

+10

'isNaN'不接受一个“整数”,它*期望*一个数字(所有IEEE-754双打,例如'isNaN(0.5)'产生'false'),这就是为什么它试图*将参数值转换为数字 – CMS

+0

您的权利 - 但我试图保持简单的逻辑。 –

0

这是因为""相当于零在JavaScript中。尝试"" == 0。这意味着如果你尝试用数值方程来评估它,它会变成0.当你解析它的时候,它意识到那里什么都没有。

作为parseInt的替代方法,您可以使用Math.floor。这会给你0""

+0

你是什么意思的“是等价的”? – Kos