为什么parseInt()
和parseFloat()
之间存在这种行为差异?
我有一个包含08
的字符串。
当我写这段代码时:
alert(hfrom[0]);
alert(parseInt(hfrom[0]));
alert(parseFloat(hfrom[0]));
生成以下输出:
08
0
8
为什么parseInt
和parseFloat
会在这种情况下返回两个不同的结果?
答案 0 :(得分:10)
parseInt()根据字符串中的第一个字符假定您的号码的基数。如果它以0x
开头,则假定为16(十六进制)。否则,如果它以0
开头,则它假定为基数8(八进制)。否则它假定为10。
您可以将基数指定为第二个参数:
alert(parseInt(hfrom[0], 10)); // 8
来自MDN(上面链接):
如果radix未定义或为0,则JavaScript假定以下内容:
如果输入字符串以“0x”或“0X”开头,则radix为16 (十六进制)。如果输入字符串以“0”开头,则基数为8 (八进制)。此功能是非标准的,有些实现 故意不支持它(而是使用基数10)。为了这 当使用parseInt时,reason总是指定一个基数。如果是输入字符串 从任何其他值开始,基数为10(十进制)。
答案 1 :(得分:2)
你应该始终在parseInt()
ex parseInt('013', 10)
中包含基数参数,否则它可以将其转换为不同的数字基础:
parseInt('013') === 11
parseInt('013', 10) === 13
parseInt('0x13') === 19