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

标签 javascript validation function decimal

为什么 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/

相关文章:

sql-server - 抛出错误的 T-SQL 函数

javascript - Chrome开发者工具数组长度

Javascript 错误隐藏在 ASP.NET 应用程序中

javascript - 引用错误 : is not defined

php - 继续获取 "invalid email"

php - 注册页面上的 mysql_real_escape_string

struts2 - 删除 struts 2 中的转换验证消息或使其通用

c - 频繁使用fopen时出错

javascript - 世界上最简单的 vue.js/vuefire/firebase 应用程序。但无法读取值

c - 头文件和函数,是我的函数、参数还是头原型(prototype)?