Ich würde bei der Verwendung von typeof foo === "undefined"
überall. Das kann nie schiefgehen.
Ich vermute, der Grund, warum jQuery empfiehlt die beiden verschiedenen Methoden ist, dass sie ihre eigenen definieren undefined
innerhalb der Funktion, in der sich der jQuery-Code befindet, so dass innerhalb dieser Funktion undefined
ist vor Manipulationen von außen sicher. Ich könnte mir auch vorstellen, dass irgendjemand die beiden unterschiedlichen Ansätze miteinander verglichen hat und festgestellt hat, dass foo === undefined
schneller ist und deshalb beschlossen hat, dass dies der richtige Weg ist. [UPDATE: Wie in den Kommentaren erwähnt, ist der Vergleich mit undefined
ist auch etwas kürzer, was eine Überlegung wert sein könnte]. In der Praxis ist der Gewinn jedoch völlig unbedeutend: Diese Prüfung wird niemals einen Engpass darstellen, und der Verlust ist beträchtlich: Die Auswertung einer Eigenschaft eines Host-Objekts zum Vergleich kann einen Fehler auslösen, während eine typeof
wird nie überprüft.
Zum Beispiel wird im IE zum Parsen von XML folgendes verwendet:
var x = new ActiveXObject("Microsoft.XMLDOM");
Um zu prüfen, ob es eine loadXML
Methode sicher:
typeof x.loadXML === "undefined"; // Returns false
Andererseits:
x.loadXML === undefined; // Throws an error
UPDATE
Ein weiterer Vorteil des typeof
Check, den ich vergessen habe zu erwähnen, ist, dass er auch mit nicht deklarierten Variablen funktioniert, die die foo === undefined
Prüfung nicht, sondern führt zu einem ReferenceError
. Danke an @LinusKleen für die Erinnerung daran. Zum Beispiel:
typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError
Fazit: Verwenden Sie immer die typeof
prüfen.