I got stung because I forgot (once again) that JavaScript does not have block scope.  Doh!  So I hope writing this down (even if it is embarrassing) will help me remember for next time.
A loop such as this:
for (i = 0; i < 10; i++) {
  var x;
  if (Math.random() > .5) x = i;
  alert(x);
}
will not yield occasional empty x values, as one might expect.  In JavaScript, having a variable declaration within the for-loop block 
does not reset the variable's value, as it would in languages that do have block scope.