function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}
function toHex(n) {
 n = parseInt(n,10);
 if (isNaN(n)) return "00";
 n = Math.max(0,Math.min(n,255));
 return "0123456789ABCDEF".charAt((n-n%16)/16)
      + "0123456789ABCDEF".charAt(n%16);
}
Notes: The script parses the input 
R, 
G, 
B values
as integers using the standard function 
parseInt(string,10);
the second, optional argument 
10 specifies that the value must be parsed as
a decimal number. (If we omit the 
10, the script would still work,
except for some input values starting with 
0, e.g. 
009 or 
011,
where it might incorrectly assume 
octal input.) 
We use the standard functions
Math.min and 
Math.max
to make sure that the input values are within the range from 0 to 255.
The interested reader might notice that a nicer way to convert 
n to a hexadecimal string
is to use 
n.toString(16); however, the above code was written
back in the ancient era when JavaScript 1.0 was still around, and the construct 
n.toString(16) won't work in JavaScript 1.0!