Nachtrag zu der akzeptierten Antwort zu verstehen, warum es mit einigen Beispielen nicht funktioniert, können Sie sich in einer Javascript-Konsole versuchen.
Der direkte Vergleich mit einem nicht definierten Typ funktioniert nur, wenn die Variable existiert. Unten ist die Ausgabe, die Sie aus dem Google Chrome-Browser bekommen:
> task === undefined
ReferenceError: task is not defined
Wenn jedoch der Variable vorhanden ist, wird es funktionieren:
// continued from above
> var task
undefined
> task === undefined
true
Dies ist der Grund, warum Sie typeof
Lösung stattdessen verwenden sollten weil es in alle Fälle ohne Wurffehler arbeiten wird (und die Ausführung von JavaScript-Code bricht).
// continued from above
> typeof notavariable === 'undefined'
true
> typeof task === 'undefined'
true
Beachten Sie, dass die typeof
Prüfung in einigen Fällen nicht benötigen, wie zum Beispiel der Eigenschaften in einem Objektliteral:
// continued from above
> var obj = {}
undefined
> obj.test === undefined
true
> obj.test = 1
1
> obj.test === undefined
false
Dies liegt daran, Eigenschaften in einem Objekt mehr wie Werte in einem verhaltenen assoziatives Array:
// continued from above
> obj["test"]
1
> obj["test"] === undefined
false
aber man kann nicht immer sicher sein, dies ein Fall in Funktion ist, wo man keine Kontrolle über das Argument Eingang hat:
// continued from above
> function TestFunc(arg1) { console.log(arg1) }
undefined
> TestFunc(notavariable)
ReferenceError: notavariable is not defined
> TestFunc(task)
undefined
undefined
> TestFunc(obj["lol"])
undefined
undefined
Ich hoffe, diese Übung hilft Ihnen, die Gründe für diesen Vergleich zu verstehen.
Vielen Dank! Warum deklariert JavaScript die Aufgabe nicht undefiniert, da sie buchstäblich undefiniert ist? – Fawkes5
Wie bereits erwähnt, können Sie den Namen 'task' nicht verwenden, wenn dieser nicht definiert ist, wird eine Ausnahme ausgelöst, wie Sie gesehen haben. 'typeof' ist besonders. Und Javascript hat es undefined deklariert, es hat es geschafft, indem es den Fehler ausgelöst hat! –
@ Fawkes5: Es gibt einen Unterschied zwischen "Variable existiert aber hat den Wert' undefined' "und" Variable existiert überhaupt nicht ". – nnnnnn