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
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
Vous voulez le `` opérateur. Plus précisément :
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 ? .
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.
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.
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.
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.