为什么 Javascript 函数调用 isNaN(123.) 返回 false? (注意 123 之后的点 (.))。这是一个普遍可接受的数字还是会导致下游错误?
我正在使用 isNaN 和拆分来验证一个值是否是有效的小数。 isNaN 是否存在跨浏览器问题?我应该使用定制的实现吗?
谢谢。
最佳答案
在 JavaScript 中 Numeric Literal 的语法是这样表达的:
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
如您所见,点之后的 DecimalDigits
部分是可选的(opt 后缀)。
var n = 123.;
typeof n; // "number"
我不推荐使用 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...
isNaN
应该仅用于与 NaN
进行比较,因为:
NaN == NaN; // false!
IsNaN(NaN); // true
如果您想检测Number
对象、Number
值或“可解析的”数字字符串,请查看this function。我已经发布了一段时间。
关于javascript - 为什么 isNaN(123.) 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011779/