傳說中的 JavaScript parseInt(’08’)

Posted by – July 2, 2012

跟大部份的公司一樣,我服務的公司上下班也要打卡,但是身為軟體與網路服務公司,上下班時間是相對自由的,打卡只是計算週工時的依據,沒有遲到早退的罰則,每個月上交卡片的時候要先把週工時算好再給老闆過目。身為懶惰的工程師,自己寫了一個週工時計算程式也是理所當然的。(笑)

用 jQuery 寫了一個非常陽春的計算程式,不過測試的時候注意到如果十點前進公司的話,工時計算就會出錯,不過因為很少十點前上班,所以這問題就先擱著。直到入夏後比較早上班才覺得這個 bug 有點惱人。

快速地瀏覽一下 web console,很快就注意到 parseInt('09') 的時候出錯了,期望回傳數字 9,但實際傳回數字 0,導致 [下班時間 減去 上班時間] 這個簡單的公式平白多了九個小時。想到之前在讀 JavaScript 設計模式 一書時,有提到 parseInt 的第二個參數問題。

把 parseInt('09') 改成 parseInt('09', 10) 果然就解決問題了,因為 parseInt 把 09 和 08 當成八進位處理了,強制指定用十進位處理即可。

然後,我又可以繼續用懶人程式算工時了。

關於這個問題的解說,可以參考以下這篇文章。

傳說中 JavaScript 的 parseInt('08') by 卜維丰

References:

Leave a Reply

Your email address will not be published. Required fields are marked *