美文网首页
由['1', '2', '3'].map(parseInt)引出

由['1', '2', '3'].map(parseInt)引出

作者: wyf_null | 来源:发表于2020-11-11 18:21 被阅读0次

    前言

    最近刷题的时候发现了一道很经典的面试题,其实之前也遇到过,但是之前的理解都是模模糊糊的,今天总算整明白了,先分享出来供大家参考,如有错误还请广大网友指正。

    正文

    1. 本题考查的主要是三个知识点

    - Array.map方法callback的参数问题
    - js中形参,实参
    - parseInt方法的使用
    
    Array.map的callback返回给parseInt方法3个参数(value, index, array),但是parseInt方法只接受了前两个参数,所以上面的题目就等价于
    
    ['1', '2', '3'].map((item, index) => {
        return parseInt(item, index)
    })
    // [1, NaN, NaN]
    

    上面的说明也很简单,大家一看就明白了,下面才是本文真正的开始

    2. parseInt

    image

    ['1', '2', '3'].map(parseInt) = [parseInt('1', 0), parseInt('2', 1), parseInt('3', 2)]

    1. radix 为 0 、false、null、undefined,如果 string 不包含 0x,一般默认为十进制

    parseInt('1', 0) // 1
    parseInt('2', false) // 2
    parseInt('3', null) // 3
    parseInt('4', undefined) // 4
    parseInt('5') // 5 这也是平时工作中使用最多的操作
    

    2. 当 radix > 0 && (radix > 36 || radix < 2) 返回NaN

    parseInt('2', 1) // NaN 
    parseInt('2', 37) // NaN 
    

    3. 当string左起第一个数大于等于radix,返回 NaN

    parseInt('5215213', 5) // NaN
    

    4. string左起第一个数小于radix,就做运算,直到遇到一个大于等于radix,就不操作

    parseInt('4215213', 5) // 111
    parseInt('4215213', 9) // 2254242
    
    parseInt('4215213', 5)
    '4215213'中的前3位是小于5的,所以计算公式是 
    4 * Math.pow(5, 2) + 2 * Math.pow(5, 1) + 1 * Math.pow(5, 0) // 111
    
    parseInt('4215213', 9)
    '4215213'中全都是小于9的,故 
    4 * Math.pow(9, 6) + 2 * Math.pow(9, 5) + 1 * Math.pow(9, 4) + 5 * Math.pow(9, 3) + 2 * Math.pow(9, 2) + 1 * Math.pow(9, 1) + 3 * Math.pow(9, 0) // 2254242
    

    结语:需要先判断string中的数字小于或等于radix的个数,然后再根据个数按照上面的方式计算。

    参考链接

    相关文章

      网友评论

          本文标题:由['1', '2', '3'].map(parseInt)引出

          本文链接:https://www.haomeiwen.com/subject/pehybktx.html