August 7th, 2008js ParseInt () function
某一哥们写了一个分析日期的函数, 日期格式大致是”yyyy-mm-dd”, 比如”2008-05-15”,
他用的代码大概是这样:
var year = ParseInt (dateStr.substr (0, 4); var month = ParseInt (dateStr.strstr(5, 2); ….
代码看上去很正确, 没什么问题, 可是他在运行代码的时候却发现这个函数对于除8, 9月份外的日期都可以正常运行, 可是对当月份为8,9月的时候就会出现错误. 这段代码有问题还是发生了一些灵异事件导致错误的发生?
于是我们开始了调试之旅(当然是用的firebug), 可以发现, 当月份为08/09的时候, var month 一行返回的是空值, 这是为啥呢? 我们找到parseInt 函数的说明文档, 发现了一句话:”If the string begins with “0″, the radix is 8 (octal). This feature is deprecated”, 嗯, 这就是问题所在. 假如一个字符串从0开始, 便认为这是一个八进制的数, 而八进制里能出现的最大数的值是7, 所以当8/9出现在一个八进制数中时当然是一个错误的输入:D.
至于修改方法, 比较简单, 自己想吧~~






