parseFloat('4.2.2.')生成4.2而不是NaN

parseFloat('4.2.2') yields 4.2 instead of NaN?

本文关键字:NaN parseFloat 生成      更新时间:2023-09-26

我在尝试破坏代码时发现了这种意外行为。。。有人能向我解释一下为什么会这样,以及应该如何确保提供的价值是真正的浮动吗?

例如:

alert(parseFloat('4.2.2'));

我期待NaN。。。不是我得到的。

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

这就是parseFloatparseInt方法的工作方式。它们解析到输入无效的地步。只有当第一个字符无效时,它们才会返回NaN。。


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

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

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


要检查字符串是否为数字,可以使用(来自JavaScript-IsNumeric((中的Validate decimal numbers(

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

将返回浮点值解析为字符串,并比较它们是否等于

当你阅读文档时,它似乎足够基本了:

parseFloat解析其参数,一个字符串,并返回一个浮点数字如果遇到符号(+或-(以外的字符,数字(0-9(、小数点或指数,它返回值到了那个地步,却忽略了那个角色和所有成功的人字符。允许使用前导空格和尾随空格。

parseFloat从左到右解析其字符串参数,直到遇到错误条件,此时停止解析。

根据mozilla

parseFloat解析其参数,一个字符串,并返回一个浮点数。如果遇到符号(+或-(、数字(0-9(、小数点或指数以外的字符,则返回该点之前的值,并忽略该字符和所有后续字符。如果第一个字符无法转换为数字,parseFloat将返回NaN。

因此,它开始从左到右解析一个float,直到无法再解析为止。在您的情况下,在遇到小数点后第二位之前,一切都很顺利。此时,它不再是一个有效的float,因此它停止解析。

在另一个示例中,如果调用parseFloat("100ASDF"(,它将返回100,而不是NaN。