Кстати, window.undefined можно переопределить, поэтому не рекомендуется проверять
if(x == undefined)
Но с undefined - это не проблема, потому что есть более граммотные способы. А что делать с переопределенным isNaN?
isNaN = function(){ alert('lol'); };
isNaN( Number('a') );
UPD: Есть такой вариант бороться с этим безобразием:
function myIsNaN( value ){
if( ( typeof value === 'number' || value instanceof Number ) && String( value ) !== 'NaN' ) return false;
return true;
};