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 undefinedVariable innerhalb der Funktion definieren , in der sich der jQuery-Code befindet, sodass diese Funktion undefinedvor 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 === undefinedschneller ist, und daher entschieden hat, dass dies der richtige Weg ist. [UPDATE: Wie in den Kommentaren erwähnt, ist der Vergleich mit undefinedauch 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 loadXMLMethode sicher vorhanden ist:
typeof x.loadXML === "undefined"; // Returns false
Andererseits:
x.loadXML === undefined; // Throws an error
AKTUALISIEREN
Ein weiterer Vorteil der typeofPrüfung, den ich vergessen habe zu erwähnen, war, dass sie auch mit nicht deklarierten Variablen funktioniert, was bei der foo === undefinedPrü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 typeofScheck.