This Javascript MD5 implementation has me confused.
In the global space, the author declares a var:
var hexcase = 0; 
Later on, the following method appears:
function rstr2hex(input)
{
  try { hexcase } catch(e) { hexcase=0; }
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var output = "";
  var x;
  for(var i = 0; i < input.length; i++)
  {
    x = input.charCodeAt(i);
    output += hex_tab.charAt((x >>> 4) & 0x0F)
           +  hex_tab.charAt( x        & 0x0F);
  }
  return output;
}
The line that I don't understand is:
try { hexcase } catch(e) { hexcase=0; }
What is the author trying to accomplish here?
He is just making sure hexcase is defined, and if it isn't, he is defining it.
Try putting
try {amIdefined} catch(e) {console.log('was not defined');}
in your console and you'll see...
Note that this is the safest way of making sure the variable is defined. In order to do
hexcase = hexcase || 0;
you need to do var hexcase first, or else you will get an error. 

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With