parseInt的結果看不懂,請看我分析


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)看看, function parseInt(),嗯,好的,又是字符串 ==> 'function parseInt()' , 'f'認識, 'u'不認識,
立即返回f (十六進制的f轉換成十進制等於15)
我:console.log(parseInt('0x10'))
瀏覽器代碼解析器:parseInt里面只有一個參數,好的,采用默認的十進制(0,1,2,3,4,5,6,7,8,9), '0x',額,這個我認識,是十六進制的寫法,好的, 
十六進制的10轉換成十進制等於16
我:console.log(parseInt('10',2))
瀏覽器代碼解析器:parseInt里面有兩個參數,第二個參數是二進制(0,1),好的, '1'認識, '0'認識 ,嗯,返回二進制的10 轉換成十進制等於2

好的,我的分析完畢。

 

現在總結一下,理解了parseInt中第二個參數 radix 是介於2-36的數, 計算機中 0到9為十進制,再往上十一進制開始用字母表示那么26個字母就可以再十進制上面加多26個進制,

即三十六進制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM