关于parseInt面试题
parsetInt([val],[radix])處理機制
? [val] 必須是一個字符串,如果不是,則也要默認轉換為字符串
? [radix]不設置(或者寫的是零):正常都是按照10處理的,如果字符串是以”0x“開始的,默認值是16
? 先在[val]中,找到所有符合[radix]進制的內容(從左到右查找,直到遇到不符合的為止「不論后面是否還有符合進制的,都不在查找了」),然后再把找到的內容看做[radix]進制,轉換為十進制
[radix]范圍 2~36,除了0以外(0->10/16),不在這個范圍內,結果都是NaN
arr = arr.map((item, index) => {// arr.map原本的意思:// 循環遍歷數組中的某一項就會觸發回調函數// 每一次還會傳遞當前項和當前項的索引})-
但是這道題map里不是我們自定義的匿名的回調函數了, 而是放的parseInt,所以parseInt現在是map循環時的回調函數。
-
parseInt也是個函數,比較常見的用法就是: parseInt(‘12px12’) => 從左側開始查找有效字符,遇到無效字符就停止查找=>12
-
parseInt特點:括號里不管是什么值,都要轉成字符串,從最左側查找,遇到無效字符停止查找
-
arr.map遍歷第一項的時候就相當于把回調函數parseInt執行,并且傳了兩個參數item和index
所以總體來說arr.map會循環5次
parseInt(‘27.2’, 0) => parseInt不識別小數點 => parseInt(‘27’, 0) => 27
parseInt(0, 1) => [radix]范圍 2~36 不在這個范圍都返回NaN => NaN
parseInt(1, 2) => 1* 2^0 = 1
parseInt(‘0013’, 3) => 3進制數 (范圍0,1,2),所以會轉化為001 => 1* 3^0 = 1
parseInt(‘123’, 4) => 4進制轉為10進制 1* 4^2+ 2 *4 ^ 1+ 3 *4 ^ 0= 16 + 8 + 3 = 27
parseInt(‘14px’, 5) => 5進制數轉為10進制 先轉化為 14 => 1* 5^1 + 4* 5^0 = 5 + 4 = 9
parseInt(0013, 6) => 以0開頭的數字會被認為是8進制數,0013轉化為8進制數 1* 8^1 + 3* 8^0 = 11。
然后再轉為10進制 1* 6^1 + 1*6^0 = 6 + 1 = 7
所以最終答案
需要注意的點:
1: 注意parseInt函數的兩個參數
2:進制轉化問題
如果把 ‘0013’ 替換為"0012"
將會是這樣轉化:
3進制數 (范圍0,1,2),所以會轉化為 0012 => 1* 3^1 + 2* 3^0 = 5
總結
以上是生活随笔為你收集整理的关于parseInt面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为多交换机trunk.rip应用全网互
- 下一篇: 了解冒泡排序选择排序