bug描述:
parseInt("08")=0;
parseInt("09")=0;
这里先回顾一下parseInt的函数声明:
/*
* 将字符串解析成数字时,从左向右依此解析,解析到第一个非法字符即停止。
* 若指定radix为2-36之间的数字,则按相应的进制进行解析;
* 若radix指定为1,或大于36的数字,则直接返回NaN
* 若指定radix为0,或未指定radix,则根据字符串开头字符确定:
* 以'1-9'开头的字符串,按10进制解析;
* 以'0'开头的字符串,按8进制解析;
* 以'0x'或'0X'开头的字符串,按16进制解析。
*
* @param string 要被解析的字符串。
* @param radix 表示要解析的数字的基数。该值介于 2 ~ 36 之间。
*/
parseInt(string, radix)
‘01’到’07’,按8进制或10进制解析会得到相同的结果。 而’08’,’09’按8进制解析会得到’0’,因为’8’、’9’在8进制中是非法字符,不会被解析。由此导致上述的bug。
找到问题根源,修复就变得很简单了,显示指定radix为10.
parseInt("08",10);