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

Behavior difference between parseInt() and parseFloat()

本文关键字:之间 parseFloat parseInt      更新时间:2023-09-26

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

我有一个包含08的字符串。

当我写这个代码时:

alert(hfrom[0]);
alert(parseInt(hfrom[0]));
alert(parseFloat(hfrom[0]));

生成以下输出:

08
0
8

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

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

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

alert(parseInt(hfrom[0], 10)); // 8

来自MDN(链接如上):

如果基数未定义或为0,JavaScript将假定以下内容:

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

您应该始终将基数参数与parseInt()(不包括parseInt('013', 10))一起包含,否则它可以将其转换为不同的基数:

parseInt('013') === 11
parseInt('013', 10) === 13
parseInt('0x13') === 19