關於parseInt進行進制的轉換

["1", "2", "3"].map(parseInt) 答案是多少?數組

 

考察點:1 . ES5的map方法,接收參數而且callback計算而且返回重組。函數

    2 . 這種寫法是個什麼概念呢,其實就是["1", "2", "3"].map(parseInt(elem,index,thisArr))this

    3 . parseInt的參數。spa

 

    咱們一個一個考點說。3d

    1 . ES5的數組操做方法map,用來把每個根據數組參數通過回掉callback返回一個新數組,callback能夠接收三個參數,elem表示數組的元素,index,下表,thisArr,所在的數組。code

    例如blog

       [ 1 , 2 , 3 ].map(function(elem,index,thisArr){

          return elem*index

      })

 

    就會得出[ 0 , 2 , 6 ],即每個數組中的元素乘以他的下標。字符串

 

    2 . ["1", "2", "3"].map(parseInt) 會怎麼樣呢string

    parseInt會取整,返回一個整數,字符串變成數字再取整。可是沒有括號是什麼鬼。沒有括號,會發生的就是把能傳的參數全傳進去。大不了傳的多了反正不影響,就會發生三次取整。it

    分別是parseInt("1",0,["1", "2", "3"]),

       parseInt("2",1,["1", "2", "3"])

       parseInt("3",2,["1", "2", "3"])

    而後返回值重組爲一個數組。

 

    3 . parseInt的參數。

    不多有人知道喪心病狂的parseInt它很差好取整,還有其餘的參數,沒錯,它有倆個參數,因此上述的第三個參數是用不到的。

    parseInt(string, radix)
    
   

    多說無益,看看W3C說的,他又是啥子意思捏。以多少來解析,就是多少進制,就是說parseInt("2",4)就是把2用4進制的方式解析成10進制的數字。

    意思就是parseInt("1",0) 他會由於radix是0,會解析出來爲 1 。

console.log(parseInt(10,2))      //2  以二進制
console.log(parseInt(101,2))      //5  以二進制
console.log(parseInt(101,3))      //10   以三進制
console.log(parseInt(401,36))      //40*36的平方+0*36+1*36的0次方
 

 

    臥槽?我聽過2 4 8 16 還沒聽過 3 , 36 ,是的,不光有這兩貨,js的parseInt能夠解析成2-36的全部進制,原理其實都同樣。

     那麼因此parseInt( "1" , 0 )是 1 ,parseInt( "2" , 1 ) 是 NaN由於沒有1進制(本身思考1進制怎麼玩,這個問題很強大),parseInt( "3" , 2 ) 這個怎麼搞,3*2的0次方麼 。 應該是 1 啊。

     可是一個2進制的數字,他會出現3麼,二進制固然全是01010101了。因此3實際上是沒有辦法解析的 。 也是NaN 。由於3不是2進制的數字,沒辦法解析成10進制

     那麼這個題的答案就通了 爲 [ 1 , NaN , NaN ]

    反思:咱們能夠學到什麼呢?

    1 . 偉大的ES5數組操做方法還有不少,都挺不錯,反正之前我都手寫過,當時好難受。

    2 . ["1", "2", "3"].map(parseInt) 這個沒有參數的調用函數方法有沒有比較炫酷呢,簡單威武,自動傳參,可是也有本身的缺點,有時候雜就不想讓他傳呢

    3 . parseInt用法其實很厲害的,能夠試試把顏色16進制轉換成rgba那種的。

 

    下面的是用上面的知識寫的16進制顏色轉化rgb

    

var a = "#ffaacc";
function colorToRGB(color){
    var color = color.split("#")[1]
    var colorArr = [] ;
    for(var i = 0 ; i<color.length ; i=i+2){
        colorArr[i/2] = [ color[i] , color[i+1] ].join("")
    }    
    return colorArr.map(function(elem){
        return parseInt(elem,16)
    }).toString()
}
console.log(colorToRGB(a))
相關文章
相關標籤/搜索