關於parseInt進行進制的轉換


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

 

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

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

    3 . parseInt的參數。

 

    我們一個一個考點說。

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

    例如

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

          return elem*index

      })

 

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

 

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

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

    分別是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))

 


免責聲明!

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



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