【问题标题】:javascript parseInt error conversion [duplicate]javascript parseInt错误转换[重复]
【发布时间】:2012-09-07 11:30:54
【问题描述】:

可能重复:
How to parseInt a string with leading 0

我使用的是谷歌浏览器版本。 21.0.1180.89

我执行:

var a="07:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

输出正确:"07 --> 7" OK

我执行:

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

输出正确:"08 --> 0" WRONG

为什么?

【问题讨论】:

  • 前导0表示八进制:00,01,02,03,04,05,06,07,10 所以08和09无效。如上所述添加基数

标签: javascript google-chrome substring parseint


【解决方案1】:

字符串以八进制的“0”开头。你必须在parseInt()中设置基数10

试试这个,

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2), 10));​

【讨论】:

    【解决方案2】:

    添加一个基数(基数):parseInt(a.substring(0,2), 10)。发生的事情是您的 js 引擎试图猜测字符串的基数,并且猜测错误,因此您需要告诉引擎使用什么基数(2 用于二进制,8 用于八进制10 用于十进制, 16 用于十六进制等)

    【讨论】:

    • ES5 中,该行为已被删除,但它仍然存在于浏览器中,可能是为了向后兼容。我想知道实际上有多少代码依赖于它。
    【解决方案3】:

    你必须使用 parseInt(a.substring(0,2),10);

    【讨论】:

      【解决方案4】:

      parseInt 有 2 个参数,string 要解析,radix 是可选的(但 JSHint/JSLint 需要)。 如果您不传递 {radix{ 参数,parseInt 将为您传递的字符串“选择”最佳值,因此对于 08 字符串,它将采用八进制基数而不是十进制基数(您想要)。

      TL;DR 使用parseInt 时始终设置基数。

      来源:MDN

      【讨论】:

        【解决方案5】:

        如果您只是为了提供不同的解决方案而花费时间,您可以尝试这样做:

        var clock = '07:30';
        var time = {
          hours: +clock.split(':')[0],
          minutes: +clock.split(':')[1]
        }
        

        【讨论】:

          猜你喜欢
          • 2012-09-24
          • 1970-01-01
          • 2018-03-11
          • 2023-03-04
          • 2015-11-25
          • 2014-03-17
          • 1970-01-01
          • 2013-10-02
          • 1970-01-01
          相关资源
          最近更新 更多