【问题标题】:parseInt("08") returns 0 [duplicate]parseInt("08") 返回 0 [重复]
【发布时间】:2012-09-01 09:07:21
【问题描述】:

可能重复:
Workarounds for JavaScript parseInt octal bug

我一直在研究一个 javascript 函数,通过声明年、月和日期来设置日期对象。但是,当月份的值为0809 时,使用parseInt() 时会返回0。见下文:

parseInt("01") //returns 1
parseInt("02") //returns 2
parseInt("03") //returns 3
parseInt("04") //returns 4
parseInt("05") //returns 5
parseInt("06") //returns 6
parseInt("07") //returns 7
parseInt("08") //returns 0?
parseInt("09") //returns 0?
parseInt("10") //returns 10

我创建了一个 jsFiddle 来演示这个问题:

http://jsfiddle.net/GhkEf/

为什么parseInt("08")parseInt("09") 返回0

【问题讨论】:

标签: javascript parsing integer


【解决方案1】:

这是因为以 0 开头的数字被认为是八进制。而 08 是八进制的错误数字。

请改用parseInt('09', 10);

【讨论】:

  • 谢谢。你节省了我的时间。
  • 这种情况只发生在 IE8 上。
  • 非常感谢。这是一个非常有用的问题和答案。
【解决方案2】:

它被解析为八进制数。使用parseInt中的radix参数。

parseInt('08', 10);

更新:从 ES5 开始,浏览器应该有这个错误。八进制文字需要采用 0o12 的形式才能被视为八进制数。 08 现在在 ES5 中默认被认为是十进制数,然而,所有浏览器可能还不支持这个,所以你应该继续将 radix 参数传递给 parseInt

【讨论】:

    【解决方案3】:

    您可以通过包含基数来解决此问题,例如:

    parseInt("08", 10); // outputs 8
    

    【讨论】:

      【解决方案4】:

      你需要添加一个基数为 10:

      parseInt("08", 10);
      

      一些实现默认为八进制。

      【讨论】:

        猜你喜欢
        • 2013-10-02
        • 2012-07-31
        • 2011-09-18
        • 2012-02-04
        • 1970-01-01
        • 2018-10-01
        • 2016-01-18
        • 2023-01-26
        • 2012-07-05
        相关资源
        最近更新 更多