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

T N*_*yen 3 javascript

可能重复:
JavaScript parseInt八进制错误的变通方法

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

Sar*_*raz 16

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

parseInt("014", 10)   // 14
Run Code Online (Sandbox Code Playgroud)

引用:

  • 如果输入字符串以"0x"或"0X"开头,则基数为16(十六进制).

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

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



TJH*_*vel 11

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

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

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

var i = parseInt(012,10);
Run Code Online (Sandbox Code Playgroud)