2012年12月26日 星期三

parseInt() 跟 "08" , "09"

按照常理來說08轉成數字會變成8 , 對吧? 可是前幾天我在使用的時候卻發生了個怪問題 , 竟然會回傳0 , 09也回傳0 , 這到底是怎麼回事呢? 一開始我還以為自己遇到parseInt的BUG , 後來去看了parseInt的原始使用方式才發現自己的觀念錯誤 .

一切都是誤會 , parseInt所擁有的功能比我們想像的還要強大很多 , 她遠本的樣子是這樣的

parseInt(string, radix)

他其實是兩個參數的 , 前面就是要轉成數字的String 後面的radix 則是要轉成哪種進位, 10進位 , 8進位 , 還是16進位 . 平常的時候第二個參數radix 不會特別去設定, 他是根據你傳入的字串的值去判斷要變成哪個.

例如當你字串是 0x 開頭的時候後 , 會自動判斷成16進位的字串 , 如果是 0 開頭則是變成8進位字的字串 , 在8進位裡面08 , 09 都是錯誤的表示方式自然回傳了 0 , 這時候再去測試010 , 011 也會獲得同樣奇怪的結果 , 因為010會自動被判斷成8進位的10於是被轉變成了8 , 而011則是9!

 所以為了避免這種情況 , 使用parseInt的時候還是順手加上第二個參數 , 例如08 09 的情況只要加上10去告訴parseInt現在使用的String是轉換成10進位就好了XD~


另外這邊有詳細的Javascript 內 parseInt的運作方式 :D

 JavaScript中parseInt()內部轉換過程

0 意見:

張貼留言