Bei lokalen Variablen ist die Überprüfung mit localVar === undefined
funktionieren, weil sie irgendwo innerhalb des lokalen Bereichs definiert worden sein müssen, sonst werden sie nicht als lokal betrachtet.
Bei Variablen, die nicht lokal und nirgends definiert sind, wird die Prüfung someVar === undefined
wird eine Ausnahme auslösen: Ungefangener ReferenceError: j ist nicht definiert
Hier ist ein Code, der verdeutlichen soll, was ich oben gesagt habe. Bitte beachten Sie die Inline-Kommentare für mehr Klarheit .
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\'].');
};
Wenn wir den obigen Code wie folgt aufrufen:
f();
Die Ausgabe würde wie folgt aussehen:
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.
Wenn wir den obigen Code wie folgt aufrufen (eigentlich mit jedem beliebigen Wert):
f(null);
f(1);
Die Ausgabe wird sein:
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.
Wenn Sie die Prüfung auf diese Weise durchführen: typeof x === 'undefined'
fragen Sie im Wesentlichen dies: Bitte prüfen Sie, ob die Variable x
irgendwo im Quellcode existiert (definiert wurde). (mehr oder weniger). Wenn Sie sich mit C# oder Java auskennen, wird diese Art von Prüfung nie durchgeführt, denn wenn sie nicht vorhanden ist, wird sie nicht kompiliert.
<== Fiddle Me ==>