js parseInt函數

這篇文章介紹了Js中的parseInt函數,有需要的朋友可以參考一下  

從很熱門的實例parseInt("09")==0說起。
parseInt(number,type)這個函數後面如果不跟第2個參數來表示進制的話,默認是10進制。
比如說parseInt("010",10)就是10進制的結果:10,
parseInt("010",2)就是2進制的結果:2,
parseInt("010",8)就是8進制的結果:8,
parseInt("010",16)就是2進制的結果:16。

  下面我來說說沒有指定進制單位的時候,默認是10進制,但:如果是裏面的Number是0開頭的就認爲是8進制的,如果是0x開頭的就認爲是16進制的。
parseInt("10")==>parseInt("010",10)===>10parseInt("010")==>parseInt("010",8)==>8parseInt("0x10")==>parseInt("010",16)==>16.

  到這裏很順利.
許多事情不是想的那麼順利,比如說如果Number不是我們給的正常數字又怎麼解釋呢。查了些資料,是這樣說的:
parseInt(Number) 如果中間的Number遇到不是數字(0-9)的就中斷往下解析,就只取不是數字之前的值去運算:比如parseInt("100x"),就相當於 parseInt("100")===》parseInt("100",10)==>100,又如parseInt("0100x")===& gt;parseInt("0100")===>parseInt("100",8)===>64.
到這裏我們似乎無視了一個就是16進制中的有個x,它也不是數字,是不是遇到x也無視了呢。嘗試下了發現在這個特殊處理了下,
比如parseInt("0x10")===>parseInt("10",16)===>16和最上面的結果相符,但卻和我剛說的,不是字符就自動不解析就應該理解成parseInt("0")相違背。

  這裏就需要注意下,parseInt裏面的Number是這樣的,當如果第一個不是0且不是字符就認爲是10進制,一切照舊執行,遇到字母就停下 來。又當如果是第一個是0,後面那個就需要注意了,如果是x就繼續往下走,這裏的x不代表數值,只能和前面的0一起組成0x代表16進制的單位,後面的才 按上面我們講的遇到非數字停止解析的規則來。比如parseInt("0xt")==>parseInt("0x")==> parseInt("",16)就是NaN了。

  總結下,parseInt(Number)裏面的值:如果是第一位不是0就遇到字母就停止解析,並把字母前面的值作爲10進制去解析,如果第一個就是字母那麼值就是空,空成了NaN,
比如:parseInt("a")==>parseInt("",10)==>NaN.parseInt("10a")==>parseInt("10")==>parseInt("10",10)==>10;
如 果第一位是0,且第2位不是x也和上面一樣遇到字母就停止解析,並把字母前面的值作爲8進制去解析,比如:parseInt("0a")==> parseInt("0")==>parseInt("0",10)==>0.PS:這個有點特殊,因爲0a被解析成了0,還不具備看做是8 進制的結構,下面那個就明顯了。
parseInt("010a")==>parseInt("010")==> parseInt("10",8)==>8;如果第一位是0,且第2位是x那後面也和上面一樣遇到字母就停止解析,並把字母前面的值作爲16進制去 解析,比如:parseInt("0xt")==>parseInt("",16)==>NaN.parseInt("0x12t")==& gt;parseInt("12",16)==>18.


實例中的parseInt("09")==0::::::::::::::::::::::::::::::::::

javascript中在使用parseInt(08)、parseInt(09),進行整數轉換的時候,返回值是0,而parseInt("01")...parseInt("07")都是正確的,原因是當在前面有"0"時,javascript會認爲這是一個八進制數,而"08"和"09"不是一個合法的八進制數,所以導致了那個問題。

parseInt函數實際上有另一個參數,顯示的告訴parseInt按照十進制處理。

解決的方法:

       parseInt("08",10) 或者 parseInt("09",10)

       Number("08")或者Number("09")

這不應該稱其爲是一個bug,只不過是我們技術不精,對其不瞭解,纔會出現這種頭疼的問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章