383 votes

variable === undefined vs typeof variable === "undefined"

La Base jQuery Style des lignes Directrices suggèrent deux façons de vérifier si une variable est définie.

  • Les Variables Globales: typeof variable === "undefined"
  • Variables Locales: variable === undefined
  • Propriétés: object.prop === undefined

Pourquoi jQuery utiliser une approche pour les variables globales et un autre pour les habitants et les propriétés?

459voto

Linus Kleen Points 15925

Pour les variables non déclarées, typeof foo retournera la chaîne littérale "undefined", tandis que le contrôle d'identité foo === undefined déclencherait l'erreur "foo n'est pas défini".

Pour les variables locales (qui vous le savez sont déclarées quelque part), une telle erreur se produit, d'où la vérification de l'identité.

144voto

Tim Down Points 124501

Je collerais à l'aide d' typeof foo === "undefined" partout. Qui ne peut jamais se tromper.

J'imagine que la raison pour laquelle jQuery recommande les deux différentes méthodes est qu'elles définissent leurs propres undefined variable dans la fonction jQuery code de vie, donc à l'intérieur de cette fonction undefined est à l'abri de la falsification de l'extérieur. J'imagine aussi que quelqu'un, quelque part, a comparé les deux approches différentes et a découvert que l' foo === undefined est plus rapide et, par conséquent, décidé qu'il est le chemin à parcourir. [Mise à JOUR: comme mentionné dans les commentaires, la comparaison avec d' undefined est également légèrement plus courte, ce qui pourrait être une considération.] Cependant, le gain en situations pratiques serez tout à fait négligeable: cette case ne sera jamais, jamais être une sorte de goulot d'étranglement, et ce que vous perdez est significatif: l'évaluation d'une propriété d'un objet hôte de comparaison peuvent jeter une erreur alors qu'un typeof case ne le sera jamais.

Pour exemple, le code suivant est utilisé dans IE pour l'analyse XML:

var x = new ActiveXObject("Microsoft.XMLDOM");

Afin de vérifier si elle a un loadXML méthode de sécurité:

typeof x.loadXML === "undefined"; // Returns false

Sur l'autre main:

x.loadXML === undefined; // Throws an error

Mise à JOUR

Un autre avantage de l' typeof vérifier que j'ai oublié de mentionner que ça fonctionne aussi avec des variables non déclarées, qui l' foo === undefined contrôle n'est pas, et, en fait, jette un ReferenceError. Grâce à @LinusKleen de me le rappeler. Par exemple:

typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError

Ligne du bas: utilisez toujours de l' typeof vérifier.

34voto

Jakob Points 11155

Encore une autre raison pour l'utilisation de la typeof-variante: undefined peut être redéfini.

undefined = "foo";
var variable = "foo";
if (variable === undefined)
  console.log("eh, what?!");

Le résultat de l' typeof variable ne le peuvent pas.

6voto

Struppi Points 39

parce que pas défini n'est pas toujours déclarer, mais jQuery déclarer non défini dans sa fonction principale. Ils utilisent donc le coffre valeur non définie en interne, mais à l'extérieur ils utilisent la typeof de style pour être en sécurité.

6voto

RiZKiT Points 78

Qui est intéressé par le gain de performance d' variable === undefined, peut prendre un coup d'oeil ici, mais il semble être un chrome optimisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X