为什么parseInt(“09”)返回0但parseInt(“07”)返回7?

时间:2012-01-06 19:30:42

标签: javascript

  

可能重复:
  Workarounds for JavaScript parseInt octal bug

为什么

parseInt("09") 

返回0,但

parseInt("07") 

返回7

2 个答案:

答案 0 :(得分:20)

0开头的字符串的基数可以是八进制(未指定基数时 - 取决于浏览器)。

您正在寻找:

parseInt("09", 10)

请参阅parseInt的文档:

  

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

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

radix可选参数(我的示例中的第二个)的注释说明了这一点:

  

虽然此参数是可选的,但始终指定,以消除读者混淆并保证可预测的行为。

答案 1 :(得分:1)

前导0表示煤价" 020"是16岁," 07"是7,没有数字" 9"在八进制系统中,因此没有转换!

使用parseInt(" 09",10)获取值9。