undefined è una variabile globale inizializzata al valore undefined; il problema è che tale variabile è accessibile in read/write.
E' quindi sufficiente sbagliare un confronto con un assegnamento (ed in Università vedo che è uno degli errori più frequenti degli studenti) per ridefinire undefined e influenzare tutto il resto del codice:
var x = 1;
if (undefined = x) ; //do something
x == undefined --> true
1 == undefined --> true
Questo comportamento molto pericoloso è stato finalmente risolto da ECMAScript 5.