JavaScript 問題解決 -- parseInt("08")或parseInt("09")轉換返回0的解決方法

 

不當心範了一個低級錯誤,這個問題也是不少初學者容易忽略滴,它就是js中的整數轉換函數parseInt(string, radix)。 

使用parseInt轉換"01" - "07"時,返回的結果和預期的同樣,相應獲得1 - 7,若是是parseInt("08")、parseInt("09")...,
函數

那麼獲得的數值將不是八、9...,你們能夠試試。 

不清楚parseInt使用方法的兄弟就會以爲很奇怪:爲何反回的值這麼怪異? 

其實不是parseInt怪異,而是咱們在使用過程忽略了它的第二個參數。 

parseInt(string, radix)的做用是將string轉換爲整數,第二個參數是設置string的格式,經常使用的有二、八、十、16,表示string是多少進制的數。 

radix 可取值的範圍是2~36,若是不在這個範圍內,將返回NaN。 

spa


若是設置radix的值是0或者不設置時,會自動識別string的格式: 

以 "0x" 開頭,parseInt() 會把 string 除0x外的其他部分看成十六進制數, 
以 "0" 開頭,parseInt() 會把 string 除0外的字符看成八進制或十六進制數, 
以 1 ~ 9 的數字開頭,parseInt() 將把它看成十進制數。 

看到這裏,應該明白爲何parseInt("08")返回的不是8了吧,由於把它當八進制了,而八進制是沒有8的,所 

以要想獲得8,那就parseInt("08",10)。 


總之,爲了不parseInt("08")獲得0這樣而不是8的問題存在,在任何使用parseInt的地方都明確指定要轉換的格式,
string

即便parseInt("5"),也要寫成parseInt("5",10),養成一個好的慣, 

一看就知道 
parseInt("11",10) 是要將十進制的"11"轉換爲整數, 

parseInt("11",2) 是要將二進制的"11"轉換爲整數。
event

相關文章
相關標籤/搜索