为什么parseInt(“014”)出现在12?

时间:2011-09-08 11:27:00

标签: javascript

  

可能重复:
  Workarounds for JavaScript parseInt octal bug

在解析Int时,似乎应该忽略前导零。这背后的理由是什么?

4 个答案:

答案 0 :(得分:16)

它被解析为八进制号码,您还需要指定 base

parseInt("014", 10)   // 14

<强>引用

  
      
  • 如果输入字符串以“0x”或“0X”开头,则radix为16   (十六进制)。

  •   
  • 如果输入字符串以“0”开头,则基数为8(八进制)。这个   功能是非标准的,有些实现故意不这样做   支持它(而不是使用基数10)。因此总是如此   使用parseInt时指定基数。

  •   
  • 如果输入字符串以任何其他值开头,则基数为10   (十进制)。

  •   

答案 1 :(得分:11)

因为它被解析为八进制数,而不是十进制数。 来自MDC

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

要强制它解析为Decimal,只需提供10作为第二个参数(base)。

var i = parseInt(012,10);

答案 2 :(得分:1)

前导零使数字为八进制

答案 3 :(得分:1)

这是一个八进制数

8 + 4 == 12