Ich würde mich typeof foo === "undefined"
überall daran halten. Das kann nie schief gehen.
Ich stelle mir vor, dass jQuery die beiden verschiedenen Methoden empfiehlt, weil sie ihre eigene undefined
Variable innerhalb der Funktion definieren , in der sich der jQuery-Code befindet, sodass diese Funktion undefined
vor Manipulationen von außen sicher ist. Ich würde mir auch vorstellen, dass irgendwo jemand die beiden unterschiedlichen Ansätze verglichen und festgestellt hat, dass dies foo === undefined
schneller ist, und daher entschieden hat, dass dies der richtige Weg ist. [UPDATE: Wie in den Kommentaren erwähnt, ist der Vergleich mit undefined
auch etwas kürzer, was eine Überlegung sein könnte.] Der Gewinn in praktischen Situationen wird jedoch völlig unbedeutend sein: Diese Überprüfung wird niemals irgendeine Art von Engpass sein, und was auch immer Ihr Verlust ist von Bedeutung: Das Auswerten einer Eigenschaft eines Hostobjekts zum Vergleich kann einen Fehler auslösen, während atypeof
überprüfen wird nie wird.
Im IE wird beispielsweise Folgendes zum Parsen von XML verwendet:
var x = new ActiveXObject("Microsoft.XMLDOM");
So überprüfen Sie, ob eine loadXML
Methode sicher vorhanden ist:
typeof x.loadXML === "undefined"; // Returns false
Andererseits:
x.loadXML === undefined; // Throws an error
AKTUALISIEREN
Ein weiterer Vorteil der typeof
Prüfung, den ich vergessen habe zu erwähnen, war, dass sie auch mit nicht deklarierten Variablen funktioniert, was bei der foo === undefined
Prüfung nicht der Fall ist und tatsächlich a auslöst ReferenceError
. Vielen Dank an @LinusKleen für die Erinnerung. Zum Beispiel:
typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError
Fazit: Verwenden Sie immer den typeof
Scheck.