不當心範了一個低級錯誤,這個問題也是不少初學者容易忽略滴,它就是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 |