【问题标题】:Parsing integer in Opera在 Opera 中解析整数
【发布时间】:2013-11-08 21:38:14
【问题描述】:

我想解析一个日期并创建一个日期时间对象。我正在使用以下代码:

function generateDateObject (dateString, timeString) {
    // Date string has the format: dd/mm/yy (4 digit year)
    // Time string has the format: hh:mm
    var dateSplit = dateString.split('/');
    var timeSplit = timeString.split(':');

    var date   = parseInt(dateSplit[0]);
    var month  = parseInt(dateSplit[1])-1; // Counting starts from zero
    var year   = parseInt(dateSplit[2]);
    var hour   = parseInt(timeSplit[0]);
    var minute = parseInt(timeSplit[1]);
    var second = 0;
    var msec   = 0;

    var result = new Date(year, month, date, hour, minute, second, msec);    
    return result;
};

然而,奇怪的是,在 Opera 下,当一个人试图解析今天的日期,即字符串“08”时,解析的整数是 0。在这里我应该提到,该函数在 Firefox、Chrome 和 Safari 下按预期工作。

所以,我的问题是:我真的需要在函数中添加更多逻辑并检查日期、月份、小时和分钟的第一个字符是否以“0”开头并删除该字符,以便我可以保证脚本在 Opera 下也能正常运行吗?

当有人也在使用 Opera 进行开发和测试时,这难道不是真正应该“开箱即用”的微不足道的事情吗?

我正在使用:Opera 12.16,build 1860,在 Mac OS X 下,10.9.0。

【问题讨论】:

    标签: javascript opera parseint


    【解决方案1】:

    将基数添加到所有parseInt() 调用。否则 JS 会将“08”识别为基数 8,其中“8”是无效字符,因此不会被解析。

    parseInt( '08' ) == 0
    parseInt( '08', 10 ) == 8
    

    MDN docu on parseInt()

    如果输入字符串以“0x”或“0X”开头,则基数为16(十六进制)并解析字符串的其余部分。

    如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)。确切选择哪个基数取决于实现。

    ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。因此,在使用 parseInt 时始终指定一个基数。

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

    【讨论】:

    • 太棒了!谢谢!我没有注意到! :)(我会尽快接受。)
    • 在某些浏览器 AFAIK 上,parseInt 的实现被破坏了。最好使用~~ 来解析javascript中的整数。
    • @mwhs 有任何例子或链接吗?
    • @Sirko:只是我自己在以前的公司中使用过一些非常大的数字和旧版本的 IE 的经验。
    【解决方案2】:

    parseInt 有一个有趣的替代方法:将字符串转换为整数,并确保这绝对适用于任何地方*您应该在 javascript 中使用双位非运算符 (~~):

    ~~'08' == 8
    

    这保证在所有浏览器中都能正常工作,而且它也比parseInt 快​​得多。

    *我看到 parseInt 在旧版本的 IE 中不能产生正确的结果

    【讨论】:

    • 它不像parseInt,例如~~'009,2' !== parseInt('009,2')
    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 2012-12-11
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2015-03-01
    相关资源
    最近更新 更多