警报(parseInt函数( “09”));告诉我“0”为什么?

时间:2011-08-01 15:38:29

标签: javascript

  

可能重复:
  Workarounds for JavaScript parseInt octal bug

非常困惑。

parseInt(“09”)= 0

parseInt(“9”)= 9

为什么前缀零不仅仅被剥离了?

警报(parseInt函数( “01”)); = 1

..愤怒退出

4 个答案:

答案 0 :(得分:19)

因为默认情况下将其视为八进制格式。如果你想获得9,你必须添加你想要的数字基数,那就是10,而不是8(对于八进制),所以请致电:

parseInt("09", 10);

答案 1 :(得分:6)

<强> A.7。 parseInt函数

parseInt 是一个将字符串转换为整数的函数。当它看到一个非数字时停止,所以 parseInt("16")parseInt("16 tons")会产生相同的结果。如果这样的话会很好 函数以某种方式向我们通知了额外的文本,但它没有。

如果字符串的第一个字符是0,则字符串在base 8而不是base 10中求值。在base 8,8和 9不是数字,因此parseInt("08")parseInt("09")会产生0作为结果。这个错误导致 解析日期和时间的程序中的问题。幸运的是, parseInt 可以采用基数参数,这样 parseInt("08", 10)生成8.我建议您始终提供基数参数。

“JavaScript:Douglas Crockford撰写的好文章。版权所有2008 Yahoo! Inc., 978-0-596-51774-8“。

答案 2 :(得分:6)

原因如下:

If the string begins with "0x", the radix is 16 (hexadecimal)
If the string begins with "0", the radix is 8 (octal). This feature is deprecated
If the string begins with any other value, the radix is 10 (decimal)

http://www.w3schools.com/jsref/jsref_parseInt.asp

答案 3 :(得分:5)

待办事项

parseInt("09", 10)

指定基数10.

编辑:为了澄清,前缀为零的数字将被假定为八进制表示法,而“09”不是有效的八进制数。