關於 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。
沒有留言:
張貼留言