函数将使用固定值,但不适用于生成它的变量
function will work with a fixed value but not with the variable that produces it
我有这个功能:
function rgbtohex(val) {
var clean = val.replace(/[^0-9\.,]/g, "");
var colors = clean.split(',');
var r = colors[0];
var g = colors[1];
var b = colors[2];
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
console.log(rgbtohex('rgb(64, 128, 128)')); //should output #408080, instead it outputs #1004288128
它应该将 rgb 转换为十六进制,如下所示:
rgbtohex('rgb(64, 128, 128)') //should output #408080, instead it outputs #1004288128
但它输出了错误的值。分解后我发现如果 var b
等于固定值(在本例中为 128)而不是变量,它将使用给定值。像这样:
var r = colors[0];
var g = colors[1];
var b = 128;
这是为什么?
Fiddle 这里:https://jsfiddle.net/kr2bmaxp/2/
您的 colors
数组是字符串数组,请尝试将其转换为数字:
function rgbtohex(val) {
var clean = val.replace(/[^0-9\.,]/g, "");
var colors = clean.split(',').map(Number);
var r = colors[0];
var g = colors[1];
var b = colors[2];
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
console.log(rgbtohex('rgb(64, 128, 128)')) //should output #408080, instead it outputs #1004288128
请注意,使用解构语法可以稍微减少代码:
let [r, g, b] = clean.split(',').map(Number);
// delete the individual r, g, b assignments
我有这个功能:
function rgbtohex(val) {
var clean = val.replace(/[^0-9\.,]/g, "");
var colors = clean.split(',');
var r = colors[0];
var g = colors[1];
var b = colors[2];
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
console.log(rgbtohex('rgb(64, 128, 128)')); //should output #408080, instead it outputs #1004288128
它应该将 rgb 转换为十六进制,如下所示:
rgbtohex('rgb(64, 128, 128)') //should output #408080, instead it outputs #1004288128
但它输出了错误的值。分解后我发现如果 var b
等于固定值(在本例中为 128)而不是变量,它将使用给定值。像这样:
var r = colors[0];
var g = colors[1];
var b = 128;
这是为什么?
Fiddle 这里:https://jsfiddle.net/kr2bmaxp/2/
您的 colors
数组是字符串数组,请尝试将其转换为数字:
function rgbtohex(val) {
var clean = val.replace(/[^0-9\.,]/g, "");
var colors = clean.split(',').map(Number);
var r = colors[0];
var g = colors[1];
var b = colors[2];
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
console.log(rgbtohex('rgb(64, 128, 128)')) //should output #408080, instead it outputs #1004288128
请注意,使用解构语法可以稍微减少代码:
let [r, g, b] = clean.split(',').map(Number);
// delete the individual r, g, b assignments