parseFloat('4.2.2')产生4.2而不是NaN?

Jer*_*acs 3 javascript parsing

当我试图破坏我的代码时,我发现了这种意想不到的行为......有人可以向我解释为什么会这样,以及应该如何确保提供的值是真正的浮动?

例如:

alert(parseFloat('4.2.2'));
Run Code Online (Sandbox Code Playgroud)

我在期待NaN......不是我得到的.

我在这里做了一个非常简单的jsfiddle演示.

Gab*_*oli 7

这就是方法parseFloatparseInt方法的工作方式.它们解析输入无效的点.它们NaN仅在第一个字符无效时返回.


引用https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloat

parseFloat解析其参数,一个字符串,并返回一个浮点数.如果遇到符号(+或 - ),数字(0-9),小数点或指数以外的字符,则返回到该点的值,并忽略该字符和所有后续字符.允许前导和尾随空格.

如果第一个字符无法转换为数字,则parseFloat返回NaN.


要检查字符串是否是您可以使用的数字(来自JavaScript中的验证十进制数字 - IsNumeric())

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)