1. 程式人生 > 其它 >關於parseInt()裡的一些小坑

關於parseInt()裡的一些小坑

關於parseInt()裡的一些小坑

parseInt(string,radix)方法是將輸入字串轉化為數值,兩個輸入引數中string為要轉化的字串,radix可省略,是瀏覽器以幾進位制來解讀輸入的string。

舉幾個例子就能夠對該方法有基本的瞭解了,如下:

parseInt("123"); //123

parseInt("123ab123"); //輸出123 因為出現字母所以該字母及之後的字元都不被解析

若輸入字串首位是0或者0x之外的數字,則在radix預設的情況下,預設解讀為10進位制。

0X預設解讀為16進位制

parseInt("0x10"); //字串以0x開頭則將之後的數字按16進位制解讀,16進位制的10也就是十進位制的16, 因此輸出為16

parseInt("0xa"); //10,要注意16進位制包括0~9,a~f (也就是10~15),超出該範圍的字元不被解讀。

parseInt("0xg"); //NAN

這三個例子分別等價於 parseInt("0x10",16) parseInt("0xa",16) parseInt("0xg",16)

以0開頭的預設解讀為八進位制,但是不同瀏覽器解讀方式不同,

parseInt("011"); //chrome下輸出為11也就是會忽略首位的0,將011當成10進位制解讀,別的瀏覽器未測試--

parseInt("011",8); //此時會輸出正確的9

因為這個坑,所以建議需要以八進位制解讀時,帶上第二引數radix並設定為8,以免出問題

parseInt("09",8); //八進位制取值範圍為0~7,不包括9,因此9不能被解讀,這時相當於parseInt("0",8);輸出0

最後有一個特殊情況:

parseInt("0.000000434"); //4

parseInt("0.00000434"); //0

造成這種情況的原因可能是因為:

document.write(0.000000434+"<br/>"); //4.34e-7
document.write(0.00000434+"<br/>");//0.00000434

當小數點後有6個或者以上的0時,會以科學記數法儲存,所以--。