cssの16進数色をrgbフォーマットに変換


対dojo/base/Colorモジュールの注記、ソースアドレスhttps://github.com/robinxiong/dojo/blob/master/_base/Color.js
function fromHex(color){
        /*
         summary:
             css    ,   rgb     

         "#fff"  -> 0xfff
            4,             , 0x10 == 16(2 4  , 1  4 0) === 1 0000,     f   1111
              mask = 1111,        (&         ),       
                     ,       b ,    4 ,     g,    4 ,    r
           b  :
         0000 1111 1111 1111 & 0000 0000 0000 1111 (      16 ,     32 )
         0000 0000 0000 1111 b      c
         0000 1111 1111 1111 >> 4, -> 0000 0000 1111 1111
           g  
         0000 0000 1111 1111 & 0000 0000 0000 1111
         0000 0000 0000 1111    g  ,      c
             ,  r  

         "ffffff" -> 0xffffff
            8,            0xff = 1111 1111
              8 ,       
         */

        var t = {},
                bits = (color.length == 4) ? 4 : 8,//   shorthand, #fff,   bits 4 ,          ,     8            #ffffff00
                mask = (1 << bits) - 1; //       ,    4  8 ,var a = (1 << 4 ) - 1 -> 10000 - 1,  a.toString(2); // 1111,   8   1111 1111
        color = Number("0x" + color.substr(1)); //#ff0000    16  0xff0000;
        if(isNaN(color)){
            return null; // Color
        }
        ["b", "g", "r"].forEach(function(x){
            var c = color & mask;
            color >>= bits;
            t[x] = bits == 4 ? 17 * c : c; // 0xfff ,   f     255,    [0-255], 15    ,       17。           17,     rgb 255  
        });
        t.a = 1;
        return t;	// Color

    }
    console.log(fromHex("#00f"))  // {r:0, g: 0, b:255, a:1}