javascript parseInt() 函數的進位轉換注意細節

來源:互聯網
上載者:User

parseInt(string, radix) 有2個參數,第一個string 是傳入的數值,第二個radix是 傳入數值的進位,參數radix 可以忽略,預設為 10,各種進位的數轉換為 十進位整數(如果不是整數,向下取整)。

radix 的取值範圍是 2~36,如果 radix 為 1 或 radix>36 ,轉換結果將是 NaN ,如果 radix 為 0 或其它值將被忽略,radix 預設為 10 。

該函數要求第一個參數是字串,如果不是字串將被轉換成字串,而且,在進行轉換之前,字串參數的左側符合進位數所使用字元集的字元被截取出來用於進位數的轉換。
字串參數開頭和結尾的空格會被忽略。

parseInt(param,radix) 相當於 parseInt(String(param).trim(),radix)
例如, parseInt(010) // 8,處理過程是 複製代碼 代碼如下:010 --> 8 //0 開頭,八位元
8 --> '8'
parseInt('8') //忽略 radix ,傳入的 第一個參數 被識別為 10進位數

複製代碼 代碼如下:parseInt(0x10) // parseInt(16) 得到十進位16
parseInt(010,16) // parseInt('8',16) ,得到 8
parseInt(010,7) // parseInt('8',7) , 8 超出 7 進位數所使用字元的範圍被丟棄,轉換結果為 NaN
parseInt(0x10,8) // parseInt('16',8) 得到 14
parseInt(0x13,8) // parseInt('19',8) 字元 9 超出了8進位數所使用字元的範圍,被丟棄,轉換結果為 1

如果第一個參數直接傳入 字串,忽略 radix ,則:
字串以 0 開頭,預設被識別為 8 進位( IE 9 識別為 10進位,ie 6-8 識別為 8 進位 )
字串以 0x 開頭,預設被識別為 16 進位
否則識別為 10進位 複製代碼 代碼如下:parseInt('010') //8 ,ie9 得到 10
parseInt('018') //1 ,ie9 得到 18
parseInt('017') //15 , ,ie9 得到 15
parseInt('010',8) //直接識別為8進位 ,轉換結果 8
parseInt('010',7) //直接識別為7進位 ,轉換結果 7
parseInt('010',16) //直接識別為16進位 ,轉換結果 16
parseInt('0x10') //16
parseInt('0x1g') //1
parseInt('0x1f') //31
parseInt('0x10',8) //直接識別為8進位 ,字元 x 超出 8進位數所使用字元的範圍,轉換結果 0
parseInt('0x10',15) // 轉換結果 0
parseInt('0x10',16) // 0x 符合 16進位數的表達格式,被正確識別為 16 進位數,轉換結果同 parseInt('10',16) 為 16
parseInt('0x10',17) // 識別為17進位,字元 x 超出 17進位數所使用字元的範圍,轉換結果 0
parseInt(true) //NaN ,注意區別 布爾型在 Number 函數中的用法, Number(true) //1

需要特別注意的
1/0 // Infinity
Infinity.toString() // 'Infinity'
於是,坑爹的來了: 複製代碼 代碼如下:parseInt(1/0,18) // NaN
parseInt(1/0,19) //18

因為 字元 i 在 19 進位數使用的字元集內,字元n 及後面的被丟棄
parseInt(1/0,19) 實際為 parseInt('i',19)
另外還有 複製代碼 代碼如下:parseInt(NaN,36) // 30191

因為 字元 n 在 36 進位中相當於 十進位 23,a 相當於十進位 10,於是有
23*36*36 + 10*36 + 23 = 30191
parseInt(1/0,36) // 1461559270678 ,實為 parseInt('Infinity',36)
parseFloat 是沒有進位參數的,只能處理10進位數。
parseFloat.length //1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.