parseInt()是什麼

我今天提了個問題:https://segmentfault.com/q/10...segmentfault

提完以後才發現是本身蠢了,理解不到位。函數

parseInt(string, radix);把字符串轉化爲整數

第一個參數必須,是要轉換爲整數的字符串,若是第一個參數不是字符串,會調用toString()先轉化爲字符串。如parseInt(070)等價於parseInt(070.toString())等價於parseInt("56").code

第二個參數可選,是你告訴這個函數,你的輸入實際上是幾進制的,讓它把這個輸入轉化爲十進制的值。若是不寫,默認爲10.好比parseInt("56", 8),你告訴函數這個"56"是八進制的,讓它輸出十進制的數值,因而:5*8+6=46。
我理解不到位的地方,就是我覺得第二個參數是告訴函數,輸出應該是幾進制的,我覺得parseInt("56", 8)是會輸出一個八進制的數,這是不對的。字符串

那麼它是怎麼運做的呢?

一句話:字符串從左到右挨個遍歷,每一個字符必須是這個進制內的有效字符(第一位能夠是負號"-"),若是不是,就中止,而後轉化全部有效的字符。若是開頭第一個就不是有效字符,直接返回NaN。get

好像很難懂?看例子就容易明白了:string

parseInt("1234blue");// 1234
parseInt("1234blue", 16);// 74571
parseInt("b123");// NaN

第一個parseInt,沒有指定radix,默認爲10,因而十進制的有效字符是:0123456789,因此它遍歷到"b"就中止了,輸出1234.遍歷

第二個parseInt,指定radix爲16,十六進制的有效字符是:0123456789abcdef,因此它遍歷到"l"才中止,截取的字符串是1234b,轉化爲十進制是74571.di

另外,對於parseInt()來講,小數點不是有效字符:parseInt("22.5")// 22co

相關文章
相關標籤/搜索