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 var
de "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 var
pour définir une variable , par opposition à let
laquelle:
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, let
contrairement à 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 var
variables. 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 let
variables ou les const
constantes 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' in
opérateur, cette méthode ne vérifie pas la chaîne prototype de l'objet.
foo
est déclarée, que ce soittypeof foo === 'undefined'
outypeof foo === typeof undefined