2419 votes

JavaScript de vérifier si la variable existe (est défini/initialisée) - méthode qui convient le mieux ?

Quelle méthode de vérifier si une variable a été initialisée est mieux/corriger ? (En supposant que la variable pouvait contenir quoi que ce soit (string, int, objet, fonction, etc..))

ou

ou

3919voto

Jim Puls Points 29289

Vous voulez le `` opérateur. Plus précisément :

1119voto

Samuel Liew Points 17275

Le `` opérateur vérifie si la variable n’est pas vraiment définie.

Le `` opérateur, contrairement aux autres opérateurs, ne jette une exception ReferenceError lorsqu’il est utilisé avec une variable non déclarée.

Pour plus d’informations sur l’utilisation de comparaison stricte, consultez : JavaScript === vs == : qu’importe quel opérateur « égaux » que j’utilise ? .

231voto

Brian Kelley Points 969

En JavaScript, une variable peut être définie, mais la valeur undefined, de sorte que la réponse la plus courante est pas techniquement correct, et au lieu de cela effectue les opérations suivantes:

if (typeof v === "undefined") {
   // no variable "v" is defined in the current scope
   // *or* some variable v exists and has been assigned the value undefined
} else {
   // some variable (global or local) "v" is defined in the current scope
   // *and* it contains a value other than undefined
}

Qui peut suffire à vos besoins. Le test suivant a de plus simple sémantique, ce qui le rend plus facile à décrire précisément votre code de comportement et de comprendre vous-même (si vous vous souciez de telles choses):

if ("v" in window) {
   // global variable v is defined
} else {
   // global variable v is not defined
}

Bien entendu, cela suppose que vous exécutez dans un navigateur (où window est un nom pour l'objet global). Mais si vous êtes de déblayage autour avec globals comme cela, vous êtes probablement dans un navigateur. Subjectivement, à l'aide de 'name' in window est stylistiquement cohérentes avec l'aide d' window.name pour se référer à des globales. L'accès globals en tant que propriétés de l' window plutôt que comme des variables vous permet de minimiser le nombre de variables non déclarées vous faites référence dans votre code (à l'avantage de l'absence de peluches), et évite la possibilité globale de votre occultée par une variable locale. Aussi, si globals rendre votre peau ramper vous pourriez vous sentir plus à l'aise qu'avec cette relativement long bâton.

125voto

Box9 Points 41987

Dans la majorité des cas, vous utilisez:

elem != null

Contrairement à un simple if (elem), il permet d' 0, false, NaN et '', mais rejette null ou undefined, en faire une règle générale, le test de la présence d'un argument ou d'une propriété d'un objet.


Les autres contrôles ne sont pas incorrecte, soit, ils ont juste à différentes utilisations:

  • if (elem): peut être utilisé si elem est garanti d'être un objet, ou si false, 0, etc. sont considérés comme des "valeurs par défaut" (donc équivalent à undefined ou null).

  • typeof elem == 'undefined' peut être utilisé dans les cas où un certain null a une signification différente d'une variable non initialisée ou des biens.

    • C'est la seule case qui ne va pas faire une erreur si elem n'est pas déclaré (c'est à dire pas d' var déclaration, pas une propriété de l' window, ou pas un argument de fonction). C'est, à mon avis, plutôt dangereux, car il permet des fautes de frappe pour se glisser inaperçu. Pour éviter cela, voir la méthode ci-dessous.

Il est également utile d'une comparaison stricte à l'encontre undefined:

if (elem === undefined) ...

Cependant, parce que le global undefined peut être remplacé par une autre valeur, il est préférable de déclarer la variable undefined dans le champ d'application actuel avant de l'utiliser:

var undefined; // really undefined
if (elem === undefined) ...

Ou:

(function (undefined) {
    if (elem === undefined) ...
})();

Un avantage secondaire de cette méthode est que JS minifiers peut réduire l' undefined variable à un seul personnage, vous permet d'économiser quelques octets à chaque fois.

28voto

Yuan Zhaohao Points 310

fonction number, indéfini, boolean, string,

 Si (typeof foo ! == « undefined ») { }

Objet, tableau

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