parseInt的使用,對於今天之前的我還是只使用用它來轉換字符數字,但是今天我遇到下面三個表達式蒙圈了
console.log(parseInt(3,8)); //3 console.log(parseInt(3,2)); //NaN console.log(parseInt(3,0)); //3
看到這里,突然發現我對parseInt很陌生呀,所以,我在MDN找到了parseInt的語法

看到這里,我還是覺得有點懵,所以我又百度了,看到博客園上另一篇對parseInt的解釋--parseInt原來是這樣用的,我看懂了radix的具體用法(相當於設置第一個字符串的幾進制),
所以我來解釋一下 上面三個的結果(我采用對話方式分析)
我:console.log(parseInt(3,8)) 瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是八進制(0,1,2,3,4,5,6,7),所以認識3,所以返回3 我:console.log(parseInt(3,2))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是二進制(0,1),額...,不好意思,我不認識3,返回NaN
我:console.log(parseInt(3,0))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是零,額,好吧,應該是默認值十進制(0,1,2,3,4,5,6,7,8,9),嗯,很好我認識3,返回3
看到這里,我們就可以清楚了理解parseInt的使用了,
在上面那篇文章中作者提到了幾個他不能理解的語法,
console.log(parseInt(1/0,19)) //18 console.log(parseInt(false,16)) //250 console.log(parseInt(parseInt,16)) //15 console.log(parseInt('0x10')) //16 console.log(parseInt('10',2)) //2
看到這些既熟悉又陌生的代碼,一開始也跟作者一樣表示看不懂,但是我后面進行試驗分析好最終解決了這幾個問題,好的,馬上進入我試驗分析
我:console.log(parseInt(1/0,19))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是十九進制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i),額,1/0,好吧先運算 結果等於Infinity,
I好的十九進制有認識,n十九進制不存在不認識,不管后面有沒有了,立即返回i(i對應的十進制中的18),所以返回18
我:console.log(parseInt(false,16))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是十六進制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),額,false,是字符串(parseInt的世界里沒有布爾值)==> 'false',
嗯,'f'認識, 'a'認識, 'l'哦,不認識,立即返回fa (十六進制的fa轉換成十進制等於250)
我:console.log(parseInt(parseInt,16))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是十六進制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),額,parseInt,是我自己嗎?不對,它后面沒有(),它不是執行函數,
好的,我先將它console.log(parseInt)看看,
我:console.log(parseInt('0x10'))
瀏覽器代碼解析器:parseInt里面只有一個參數,好的,采用默認的十進制(0,1,2,3,4,5,6,7,8,9), '
我:console.log(parseInt('10',2))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是二進制(0,1)
好的,我的分析完畢。
現在總結一下,理解了parseInt中第二個參數 radix 是介於2-36的數, 計算機中 0到9為十進制,再往上十一進制開始用字母表示那么26個字母就可以再十進制上面加多26個進制,
即三十六進制。
