parseInt()和parseFloat()之间的行为差​​异

Nav*_*utt 8 javascript parsing

为什么这种行为parseInt()parseFloat()?之间存在差异?

我有一个包含08在其中的字符串.

当我写这段代码时:

alert(hfrom[0]);
alert(parseInt(hfrom[0]));
alert(parseFloat(hfrom[0]));
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

08
0
8
Run Code Online (Sandbox Code Playgroud)

为什么parseIntparseFloat在这种情况下返回两个不同的结果?

Pau*_*aul 10

parseInt()根据字符串中的第一个字符假定您的号码的基数.如果以它开头,0x它假定为16(十六进制).否则,如果以它开头,0它假定为基数8(八进制).否则它假定为10.

您可以将基数指定为第二个参数:

alert(parseInt(hfrom[0], 10)); // 8
Run Code Online (Sandbox Code Playgroud)

来自MDN(上面链接):

如果radix未定义或为0,则JavaScript假定以下内容:

如果输入字符串以"0x"或"0X"开头,则基数为16(十六进制).如果输入字符串以"0"开头,则基数为8(八进制).此功能是非标准的,有些实现故意不支持它(而是使用基数10).因此,在使用parseInt时始终指定基数.如果输入字符串以任何其他值开头,则基数为10(十进制).