Une alternative à la pléthore de typeof réponses;
Variables globales déclarées avec une var varname = value;instruction dans la portée globale
est accessible en tant que propriétés de l'objet fenêtre.
En tant que telle, la hasOwnProperty()méthode, qui
renvoie un booléen indiquant si l'objet a la propriété spécifiée comme sa propre propriété (par opposition à l'hériter)
peut être utilisé pour déterminer si
a varde "varname" a été déclaré globalement, c'est -à- dire qu'il est une propriété de window.
// Globally established, therefore, properties of window
var foo = "whatever", // string
bar = false, // bool
baz; // undefined
// window.qux does not exist
console.log( [
window.hasOwnProperty( "foo" ), // true
window.hasOwnProperty( "bar" ), // true
window.hasOwnProperty( "baz" ), // true
window.hasOwnProperty( "qux" ) // false
] );
Ce qui est génial, hasOwnProperty()c'est qu'en l'appelant, nous n'utilisons pas une variable qui pourrait encore être non déclarée - ce qui bien sûr est la moitié du problème en premier lieu.
Bien que ce ne soit pas toujours la solution parfaite ou idéale , dans certaines circonstances, c'est juste le travail!
Remarques
Ce qui précède est vrai lors de l'utilisation varpour définir une variable , par opposition à letlaquelle:
déclare une variable locale de portée de bloc, l'initialisant éventuellement à une valeur.
est différent du var mot clé, qui définit une variable globalement ou localement à une fonction entière quelle que soit la portée du bloc.
Au niveau supérieur des programmes et des fonctions, letcontrairement à var, ne crée pas de propriété sur l'objet global.
Pour être complet: les const constantes ne sont, par définition, pas réellement variables (bien que leur contenu puisse l'être); de manière plus pertinente:
Les constantes globales ne deviennent pas des propriétés de l'objet fenêtre, contrairement aux varvariables. Un initialiseur pour une constante est requis; c'est-à-dire que vous devez spécifier sa valeur dans la même instruction dans laquelle il est déclaré.
La valeur d'une constante ne peut pas changer lors de la réaffectation et elle ne peut pas être redéclarée.
La déclaration const crée une référence en lecture seule à une valeur. Cela ne signifie pas que la valeur qu'il contient est immuable, mais simplement que l'identificateur de variable ne peut pas être réaffecté.
Étant donné que les letvariables ou les constconstantes ne sont jamais les propriétés d'un objet qui a hérité de la hasOwnProperty()méthode, il ne peut pas être utilisé pour vérifier leur existence.
Concernant la disponibilité et l'utilisation de hasOwnProperty():
Chaque objet issu d' Object hérite de la hasOwnProperty()méthode. [...] contrairement à l' inopérateur, cette méthode ne vérifie pas la chaîne prototype de l'objet.
fooest déclarée, que ce soittypeof foo === 'undefined'outypeof foo === typeof undefined