538 votes

typeof ! == « undefined » vs ! = null

Je vois souvent des code JavaScript qui vérifie les paramètres non définis etc. de cette façon:

if (typeof input !== "undefined") {
    // do stuff
}

Ce qui semble sorte de gaspillage, car il implique à la fois un type de recherche et de comparaison de chaînes de caractères, sans parler de son niveau de verbosité. C'est nécessaire parce que 'undefined' pourrait être renommé. Ma question est: Comment est-ce que le code de mieux que cette approche:

if (null != input) {
    // do stuff
}

Autant que je sache, vous ne pouvez pas redéfinir la valeur null, alors ça ne va pas casser de façon inattendue. Et, en raison de la contrainte de type de l' != l'opérateur, celui-ci vérifie pour les deux indéfini et nul... ce qui est souvent exactement ce que vous voulez (par exemple pour l'option paramètres de la fonction). Mais cette forme ne semble pas très répandue, et il provoque même JSLint à hurler à vous pour l'aide de la mal != de l'opérateur. Pourquoi est-ce considéré comme de mauvais goût?

769voto

seanmonstar Points 5011

``permet l’identificateur n’ont jamais été déclarées avant. Il est donc plus sûr à cet égard :

54voto

Joey Adams Points 13049

Si la variable est déclarée (soit avec le `` mot clé, comme un argument de fonction, ou comme une variable globale), je pense que la meilleure façon de le faire est :

jQuery fait, il est assez bon pour moi  :-)

Dans le cas contraire, vous devrez utiliser afin d’éviter une .

Si vous prévoyez que l’indéfini pour être redéfinis, vous pourriez encapsuler votre code comme celui-ci :

31voto

JOKe Points 459

bon moyen :

Mais la plus belle façon est de vérifier :

14voto

Peeter Points 4580

Vous ne devriez pas vraiment vous inquiétez pas défini d'être rebaptisé. Si quelqu'un renomme pas défini, vous serez dans une bien plus d'ennuis que quelques si la vérification échoue. Si vous voulez vraiment protéger votre code, de l'envelopper dans un IFFE (immédiatement appelé la fonction de l'expression) comme ceci:

(function($, Backbone, _, undefined) {
    //undefined is undefined here.
})(jQuery, Backbone, _);

Si vous travaillez avec des variables globales (qui est mal déjà) dans un navigateur de l'environnement, je voudrais vérifier pour non-défini comme ceci:

if(window.neverDefined === undefined) {
    //Code works
}

Puisque les variables globales sont une partie de l'objet de la fenêtre, vous pouvez simplement cocher contre undefined à la place de la coulée de la chaîne et de la comparaison de chaînes.

En plus de cela, pourquoi vos variables non définies? J'ai vu beaucoup de code où ils vérifient une des variables d'existence et d'effectuer une action sur cette base. Pas une seule fois je n'ai vu où cette approche a été correct.

5voto

Ivo Wetzel Points 27802

Si vous êtes vraiment inquiet pour undefined redéfini, vous pouvez protéger contre cela avec une méthode d’assistance comme ceci :

Ceci fonctionne parce que quand quelqu'un écrit il ne laisse passer le **nom de** référence à une nouvelle valeur, mais il ne change pas la valeur réelle du `` .

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