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);