你认为parseInt(“08”)会回归什么?

时间:2011-06-20 10:46:03

标签: javascript parsing

  

可能重复:
  Workarounds for JavaScript parseInt octal bug

令人惊讶的是它返回0。为什么?什么是获得正确结果的(正确)解决方案?

7 个答案:

答案 0 :(得分:16)

使用基数:

var x = parseInt("08", 10);

某些JavaScript实现将第三个数字系统添加到由标准定义的两个数字系统中(十进制,默认值;和十六进制,前缀为0x):八进制,前缀为0。这是非标准,但在latest spec确认为常见。

由于8不是有效的八进制数字,parseInt会停在那里,返回值0

通过明确使用基数,您告诉parseInt不要试图找出正在使用的数字系统,而是使用您指定的数字系统。键入parseInt时,您的直觉总是指定基数;如果不这样做会让你对古怪感到开心。

答案 1 :(得分:1)

“08”表示基于8的数字。你应该指定第二个参数。

 parseInt("08", 10)

答案 2 :(得分:1)

@T.J. gave a great explanation for the behaviour you see。解析数字字符串的另一种方法是使用一元+

var num = +"08";

答案 3 :(得分:0)

来自http://www.bennadel.com/blog/2012-Exploring-Javascript-s-parseInt-And-parseFloat-Functions.htm

  

以“0”开头的字符串被假定为base8(八进制)。

答案 4 :(得分:0)

来自MDC - parseInt

  

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

示例:

  

parseInt函数( “08”); // 0,'8'不是八进制数字。

也就是说,因为没有传入基数,所以字符串以0八进制开头。由于8不是八进制数字,因此无法解析。

解决方案?始终提供基数参数:

parseInt("08", 10);

答案 5 :(得分:0)

如果你通过jslint运行它,它会因为你不包括radix参数而尖叫。是的,基数是可选的,但每次都可能包括在内。除非另有说明,否则以0开头的数字被假定为八进制。

var foo = parseInt("08", 10);

答案 6 :(得分:0)

前缀为“0”的数字是八进制数。 8是无效的八进制数。所以结果是0