Per le variabili locali, il controllo con localVar === undefined
funzionerà perché devono essere stati definiti da qualche parte nell'ambito locale o non saranno considerati locali.
Per le variabili che non sono locali e non definite da nessuna parte, il controllo someVar === undefined
genererà un'eccezione: Uncaught ReferenceError: j non è definito
Ecco un po 'di codice che chiarirà ciò che sto dicendo sopra. Si prega di prestare attenzione ai commenti incorporati per ulteriore chiarezza .
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\'].');
};
Se chiamiamo il codice sopra in questo modo:
f();
L'output sarebbe questo:
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.
Se chiamiamo il codice sopra come questo (con qualsiasi valore effettivamente):
f(null);
f(1);
L'output sarà:
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.
Quando esegui il controllo in questo modo typeof x === 'undefined'
:, essenzialmente lo chiedi: controlla se la variabile x
esiste (è stata definita) da qualche parte nel codice sorgente. (più o meno). Se conosci C # o Java, questo tipo di controllo non viene mai eseguito perché se non esiste, non verrà compilato.
<== Fiddle Me ==>