2011年3月6日 星期日

JavaScript parseInt 08或09 回傳0的問題

原因:
這是一個著名的問題,parseInt('01')到07都沒問題,只有08和09回傳。
因為parseInt這個函數,有兩個參數可傳遞:
parseInt(string, radix)

第一個參數 string為轉換為數字的字串
第二個參數 radix 則是設定二進位、還是八進位或十六進位等

若沒設定radix,會自動判斷string,設定進位
EX: 0x 開頭的字串,都視為十六進位字串
    0開頭則視為八進位或二進位字串

故parseInt('08')會被判斷為八進位,而八進位裡不會出現 8 和 9 這兩個字母,所以視為不合法的字串,於是就傳回 0。

若parseInt('010')則會被判斷為二進位


解決方法:
1. string不要給08,給8就沒問題了。
2. 把第二個參數也加進去,例如 parseInt('08',10)。

延伸閱讀:
1. parseInt詳細解說
2. JavaScript中parseInt()內部轉換過程