为什么isNaN(123.)返回false?

viv*_*man 7 javascript validation function decimal

为什么Javascript函数调用isNaN(123.)返回false?(注意123之后的点(.)).这是一个普遍接受的数字还是会导致下游错误?

我正在使用isNaN和split来验证值是否是有效小数.isNaN是否存在跨浏览器问题?我应该使用定制的实现吗?

谢谢.

CMS*_*CMS 18

在JavaScript中,Numeric Literal的语法表达如下:

DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt 
Run Code Online (Sandbox Code Playgroud)

如您所见,DecimalDigits点后面的部分是可选的(opt后缀).

var n = 123.;
typeof n; // "number"
Run Code Online (Sandbox Code Playgroud)

我不建议使用isNaN函数来检测数字,因为类型强制可能会使某些东西看起来很奇怪:

isNaN(""); // false, a empty string coerces to zero
isNaN("\n\t"); // false, a white-space string coerces to zero
isNaN(true); // false, boolean true coerces to 1
isNaN(false); // false, boolean false coerces to zero
isNaN(new Date); // false, Date objects coerce to its numeric timestamp
// etc...
Run Code Online (Sandbox Code Playgroud)

isNaN应该只用于比较NaN,因为:

NaN == NaN; // false!
IsNaN(NaN); // true
Run Code Online (Sandbox Code Playgroud)

如果你想检测Number对象,Number值或"可解析的"数字字符串,请看看我之前发布的这个函数.