Para las variables locales, verificar con localVar === undefined
funcionará porque deben haberse definido en algún lugar dentro del alcance local o no se considerarán locales.
Para las variables que no son locales y no están definidas en ninguna parte, la comprobación someVar === undefined
arrojará una excepción: Error de referencia no capturado: j no está definido
Aquí hay un código que aclarará lo que digo anteriormente. Por favor, preste atención a los comentarios en línea para mayor claridad .
function f (x) {
if (x === undefined) console.log('x is undefined [x === undefined].');
else console.log('x is not undefined [x === undefined.]');
if (typeof(x) === 'undefined') console.log('x is undefined [typeof(x) === \'undefined\'].');
else console.log('x is not undefined [typeof(x) === \'undefined\'].');
// This will throw exception because what the hell is j? It is nowhere to be found.
try
{
if (j === undefined) console.log('j is undefined [j === undefined].');
else console.log('j is not undefined [j === undefined].');
}
catch(e){console.log('Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.');}
// However this will not throw exception
if (typeof j === 'undefined') console.log('j is undefined (typeof(x) === \'undefined\'). We can use this check even though j is nowhere to be found in our source code and it will not throw.');
else console.log('j is not undefined [typeof(x) === \'undefined\'].');
};
Si llamamos al código anterior así:
f();
El resultado sería este:
x is undefined [x === undefined].
x is undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.
Si llamamos al código anterior como estos (con cualquier valor en realidad):
f(null);
f(1);
La salida será:
x is not undefined [x === undefined].
x is not undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.
Cuando realiza la comprobación de esta manera: typeof x === 'undefined'
esencialmente pregunta esto: compruebe si la variable x
existe (se ha definido) en algún lugar del código fuente. (más o menos). Si conoce C # o Java, este tipo de verificación nunca se realiza porque si no existe, no se compilará.
<== Fiddle Me ==>