Eine Alternative zur Fülle von typeof
Antworten;
Globale Variablen, die mit einer var varname = value;
Anweisung im globalen Bereich deklariert wurden
kann als Eigenschaften des Fensterobjekts zugegriffen werden.
Als solche die hasOwnProperty()
Methode, die
Gibt einen Booleschen Wert zurück, der angibt, ob das Objekt die angegebene Eigenschaft als eigene Eigenschaft hat (im Gegensatz zum Erben).
kann verwendet werden, um festzustellen, ob
a var
von "varname" wurde global deklariert, dh es ist eine Eigenschaft von 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
] );
Das Tolle daran hasOwnProperty()
ist, dass wir beim Aufrufen keine Variable verwenden, die möglicherweise noch nicht deklariert ist - was natürlich in erster Linie das halbe Problem ist.
Obwohl dies nicht immer die perfekte oder ideale Lösung ist, ist es unter bestimmten Umständen nur der Job!
Anmerkungen
Das Obige gilt für die var
Definition einer Variablen , im Gegensatz zu let
:
deklariert eine lokale Variable für den Blockbereich und initialisiert sie optional mit einem Wert.
unterscheidet sich vom var
Schlüsselwort, das eine Variable global oder lokal für eine gesamte Funktion unabhängig vom Blockbereich definiert.
Auf der obersten Ebene von Programmen und Funktionen wird let
im Gegensatz dazu var
keine Eigenschaft für das globale Objekt erstellt.
Der Vollständigkeit const
halber : Konstanten sind per Definition nicht wirklich variabel (obwohl ihr Inhalt sein kann); relevanter:
Globale Konstanten werden im Gegensatz zu var
Variablen nicht zu Eigenschaften des Fensterobjekts . Ein Initialisierer für eine Konstante ist erforderlich. Das heißt, Sie müssen den Wert in derselben Anweisung angeben, in der er deklariert ist.
Der Wert einer Konstante kann sich durch Neuzuweisung nicht ändern und kann nicht neu deklariert werden.
Die const-Deklaration erstellt einen schreibgeschützten Verweis auf einen Wert. Dies bedeutet nicht, dass der darin enthaltene Wert unveränderlich ist, sondern dass die Variablenkennung nicht neu zugewiesen werden kann.
Da let
Variablen oder const
Konstanten niemals Eigenschaften eines Objekts sind, das die hasOwnProperty()
Methode geerbt hat , kann sie nicht zur Überprüfung ihrer Existenz verwendet werden.
In Bezug auf die Verfügbarkeit und Verwendung von hasOwnProperty()
:
Jedes von Object abstammende Objekt erbt die hasOwnProperty()
Methode. [...] Im Gegensatz zum in
Operator überprüft diese Methode nicht die Prototypenkette des Objekts.
foo
deklariert ist, entwedertypeof foo === 'undefined'
odertypeof foo === typeof undefined