JS 進制轉換的理解


該事情的由來是來自於一個面試題,題目是這樣的,[1,2,3].map(parseInt)的結果是什么?

作為菜鳥的我們一定是覺得分別把1,2,3分別交給parseInt,無非就是1,2,3嘛。其實結果輸出是這樣的,1,NaN,NaN,為什么會這樣?

那就涉及到兩個知識點了,首先map的時候,里面傳一個函數,那么map會默認給函數傳兩個參數:value,index,那么這兩個參數傳給parseInt的時候,代表的意思就不一樣了,parseInt函數接收兩個參數第一個是要轉換的字符串,第二個是代表的按幾進制進行轉換,注意:是按幾進制進行轉換,而不是轉成了幾進制。

那么再來看[1,2,3].map(parseInt),

第一次循環,傳給parseInt(1,0),把1按0進制轉換,0默認表示10進制,然后輸出1。

第二次循環,傳給parseInt(2,1),把2按1進制轉換,引擎懵逼了,1進制中根本不可能出現2這個數字好嗎?我咋給你解析,無法解析,給了個NaN。

第三次循環,傳給parseInt(3,2),把3按2進制轉換,引擎又懵逼了,啥玩意兒?2進制中根本不可能出現3這個數字好嗎?我咋給你解析,無法解析,又給了個NaN。

parseInt第二個參數的范圍是為介於2-36之間的數。

那么我如果就想把一個十進制的數,轉換成固定的進制數呢?比如我想把8轉換成2進制數, 應該是1000,怎么做?

那就應該使用Number.prototype.toString(radix),radix表示的也是要轉成幾進制,范圍是介於2-36之間的數。

var a = 8; a.toString(2);或者(8).toString(2);或者Number(8).toString(2);

注意調toString的時候,必須保證調用者是Number類型,因為只有Number原型下的toString方法才支持radix轉換,其他的像Object.prototype.toString,String.prototype.toString,Array.prototype.toString,Function.prototype.toString等等,都不接受參數,所以要使用該方法之前需要將調用者轉成Number類型。


免責聲明!

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



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