将 RGB 转换为 HEX 问题

converting RGB to HEX issue

根据 Whosebug 主题之一,我尝试创建自己的 RGB 到 HEX 颜色转换器。

我不知道为什么,而是将其转换为双 RGB 数字。

所以当输入为 rgb(0, 128, 192) 时,它会输出 #00128192

我的代码是:

fromRGB: {
    toHEX: {
        supportFunc: function(number) {
            var hex = number.toString(16);
            return hex.length == 1 ? '0' + hex : hex;
        },
        convert: function(r, g, b) {
            var lol = '#' + this.supportFunc(r) + this.supportFunc(g) + this.supportFunc(b);
            console.log(lol);
        }
    },
    prepareAndExecute: function(color_field) {
        // preparing
        var numbers = color_field.match(/\d+/g);
        if(numbers.length == 3) {
            this.toHEX.convert(numbers[0], numbers[1], numbers[2]);
        } else {
            alert('wrong RGB number format');
        }


        //this.toHSL(preparedValue);
    }
}

我执行准备函数,lol变量应该包含十六进制格式的转换颜色。

我的代码有什么问题,为什么它不起作用?

解释:

这是因为您将字符串而不是数字传递给 supportFunc

prepareAndExecutematch的结果是一个字符串数组,因此当你在supportFunc中调用toString时,你调用的是String.prototype.toString(不是 Number.prototype.toString) return 字符串原样。

解法:

supportFunc中,在使用toString之前将number转换为数字:

var hex = Number(number).toString(16);                       // using Number to convert a string to a number (you can use parseInt or unary + if you like)

或在将它们传递给 convert 之前转换它们:

this.toHEX.convert(+numbers[0], +numbers[1], +numbers[2]);   // using unary +