zoukankan      html  css  js  c++  java
  • 关于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))
  • 相关阅读:
    56. Merge Intervals
    Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths CodeForces
    CodeForces 1328E-Tree Queries【LCA】
    2^x mod n = 1 HDU
    CodeForces 1327D
    CodeFoeces 1327E
    AtCoder Beginner Contest 159 E
    牛客14648-序列【莫比乌斯反演+容斥定理】
    完全平方数 HYSBZ
    MongoDB学习笔记(六、MongoDB复制集与分片)
  • 原文地址:https://www.cnblogs.com/sowhite/p/6395030.html
Copyright © 2011-2022 走看看