2026年9月28日 星期一

關於 Number.parseInt()

 關於 Number.parseInt()

前言

  最近在用 Number.parseInt() 發現他的有些行為跟預期的行為不太一樣,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Number.parseInt('123.4567') );//123
console.log( Number.parseInt('12',16) );//18
console.log( Number.parseInt('f0',16) );//240
console.log( Number.parseInt('0xf0',16) );//240
console.log( Number.parseInt('100',2) );//4
//
console.log( Number.parseInt('200',2) );//NaN
console.log( Number.parseInt('102',2) );//2
console.log( Number.parseInt('122',2) );//1
console.log( Number.parseInt('0xfg',16) );//15


Number.parseInt() 是可以將字串轉成數值,並且支援進制轉換,輸入第二個引數可以指名要轉換的進制。範例開頭輸入有有小數的字串,可以發現所有的小數都會不見,我之前認為會報錯或回傳 undefined 之類的,接著示範 16 進制的轉換,十六進制的 12 就是十進制的 18, 十六進制的 f0 就是十進制的 240 ,同時也只支援在開頭有 0x 的字串,二進制的 100 就是十進制的 4 。當字串存在不應該出現的位元數值,如二進制不可能有位元數值是 2 ,所以二進制的 200 轉換後是 NaN ,如預期,接著二進制的 200 轉換後是 2 !不是NaN,二進制的 122 轉換後是 1,十六進制的 fg 轉換後是 15 ,有發現規則嗎?當字串存在不應該出現的位元數值時,轉換還是會正常轉換,會從最高位元開始解析,解析到有問題的位元數值時就放棄後方所有的解析,只有當最高位元就是有問題的位元數值才會回傳 NaN。


參考資料

[ developer.mozilla.org ] Number.parseInt()

沒有留言:

張貼留言