Wie überprüfe ich die Existenz eines Objekts in JavaScript?
Folgendes funktioniert:
if (!null)
alert("GOT HERE");
Dies wirft jedoch einen Fehler auf:
if (!maybeObject)
alert("GOT HERE");
Der Fehler:
maybeObject
ist nicht definiert.
Sie können den typeof
Operator sicher für undefinierte Variablen verwenden.
Wenn ihm ein Wert zugewiesen wurde, einschließlich null, gibt typeof etwas anderes als undefiniert zurück. typeof gibt immer einen String zurück.
Deshalb
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
!==
für den Vergleich tun .Da es hier viele Halbwahrheiten gibt, dachte ich, ich mache einige Dinge klarer.
Tatsächlich können Sie nicht genau sagen, ob eine Variable vorhanden ist (es sei denn, Sie möchten jede zweite Zeile in einen Try-Catch-Block einschließen).
Der Grund dafür ist, dass Javascript diesen berüchtigten Wert hat,
undefined
was auffallend nicht bedeutet, dass die Variable nicht definiert ist oder nicht existiertundefined !== not defined
Also sowohl eine Variable, die existiert, als auch eine andere, die Ihnen den
undefined
Typ nicht melden kann .Was @ Kevins Missverständnis betrifft ,
null == undefined
. Dies ist auf===
Typzwang zurückzuführen , und es ist der Hauptgrund, warum Crockford jedem, der sich über solche Dinge nicht sicher ist, immer wieder sagt, dass er immer einen strengen Gleichheitsoperator verwenden soll , um auf möglicherweise falsche Werte zu testen.null !== undefined
gibt Ihnen, was Sie erwarten könnten. Bitte beachten Sie auch, dassfoo != null
dies eine effektive Möglichkeit sein kann, um zu überprüfen, ob eine Variable wederundefined
noch istnull
. Natürlich können Sie explizit sein, da dies die Lesbarkeit verbessern kann.Wenn Sie die Frage einschränken, um zu überprüfen, ob ein Objekt vorhanden ist, ist dies
typeof o == "object"
möglicherweise eine gute Idee, es sei denn, Sie berücksichtigen keine Arrays-Objekte, da dies auch als Typ gemeldet wird, derobject
Sie möglicherweise etwas verwirrt. Ganz zu schweigen davon, dass Sietypeof null
auch das bekommen,object
was einfach falsch ist.Der Ur - Bereich , wo man wirklich vorsichtig sein sollte , etwa
typeof
,undefined
,null
,unknown
und andere misteries sind Host - Objekte. Man kann ihnen nicht vertrauen. Sie können fast alles tun, was sie wollen. Seien Sie also vorsichtig mit ihnen und prüfen Sie die Funktionalität, wenn Sie können, da dies die einzige sichere Möglichkeit ist, eine Funktion zu verwenden, die möglicherweise gar nicht existiert.quelle
foo!=null
Wenn Sie diesfoo
nicht tun, wird ein ReferenceError erstellt, wenn dieser nicht definiert ist. Daher ist es besser zu verwendentypeof
, es sei denn, Sie planen, die Ausnahme abzufangen.undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Ich habe nicht gesagt, dass!= null
es gut ist, um zu überprüfen, ob es existiert. Sie nehmen es aus dem Zusammenhang. (Ich erwähnte auch, dass es eine Nebenbemerkung ist, die nicht eng mit dem Thema der OP-Frage zusammenhängt)undefined
. Sie sind nicht gleich.(note) it can be used !== you should use
. Verwenden Sie beim Lesen den gesunden Menschenverstand. Wenn die Variable deklariert ist (Parameterliste oder anderswo) und Sie überprüfen möchten, ob sie einen Wert hat, ist!=
null völlig sicher. Es ist ein anderer Anwendungsfall als das, was das OP verlangt hat, deshalb habe ich ihn als Notiz eingeführt. Der ganze Absatz handelt übrigens von @ Kevins Post und Typ Zwang. Wie Sie feststellen können, wenn Sie sorgfältig lesen.!= null
wenn Sie wissen, dass die Variable deklariert wurde. Dies ist sehr nützlich, um Funktionsargumente zu überprüfen.var hasValue = function(foo) {return foo != null}
Sie können verwenden:
quelle
Zwei Wege.
typeof für lokale Variablen
Sie können mit typeof auf ein lokales Objekt testen:
Fenster für globale Variablen
Sie können ein globales Objekt (eines, das im globalen Bereich definiert ist) testen, indem Sie das Fensterobjekt untersuchen:
quelle
Wenn dies ein globales Objekt ist, können Sie es verwenden
if (!window.maybeObject)
quelle
window.hasOwnProperty('maybeObject')
es etwas lesbarer, wenn es ein globales Objekt istSie könnten "typeof" verwenden.
quelle
Der Thread wurde vor einiger Zeit geöffnet. Ich denke in der Zwischenzeit ist die Verwendung eines ternären Operators die einfachste Option:
quelle
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
und prüfen Sie, ob nichtfalse
.Früher habe ich
if(maybeObject)
in meinen Javascripts nur eine Nullprüfung durchgeführt.Nur wenn
maybeObject
- ein Objekt ist, wird die Warnung angezeigt. Ich habe ein Beispiel auf meiner Website.https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
quelle
maybeObject
ist0, 0.0, or ""
, es prüft auf falseIch habe gerade die typeOf-Beispiele von oben getestet und keines hat für mich funktioniert. Stattdessen habe ich Folgendes verwendet:
quelle
Abgesehen von der Überprüfung der Existenz des Objekts / der Variablen möchten Sie möglicherweise eine "Worst-Case" -Ausgabe bereitstellen oder sie zumindest in einer Warnung einfangen, damit sie nicht unbemerkt bleibt.
Beispiel für eine Funktion, die Fehler überprüft, Alternativen bereitstellt und abfängt.
Ich habe dies auch erstellt, weil das Objekt, an das ich es übergeben habe, x, xm, xm [z] sein kann und der Typ xm [z] mit einem Fehler fehlschlagen würde, wenn xm nicht vorhanden wäre.
Ich hoffe, es hilft. (Übrigens bin ich Anfänger bei JS)
quelle
Für mich funktionierte das für ein DOM-Objekt:
quelle
Wenn Sie sich nur um seine Existenz kümmern (wurde es deklariert?), Reicht die genehmigte Antwort aus:
Wenn es Ihnen wichtig ist, dass es einen tatsächlichen Wert hat, sollten Sie Folgendes hinzufügen:
Wie
typeof( null ) == "object"
z.B
bar = { x: 1, y: 2, z: null}
Auf diese Weise überprüfen Sie, ob es weder
null
noch istundefined
, und datypeof
kein Fehler auftritt, wenn kein Wert vorhanden ist, plus&&
Kurzschlüsse, erhalten Sie niemals einen Laufzeitfehler.Persönlich würde ich vorschlagen, irgendwo einen Helfer fn hinzuzufügen (und lasst uns nicht vertrauen
typeof()
):quelle
quelle
quelle
Setzen Sie den Textfeldwert mithilfe des Registerkartenfelds div alignmnt auf einen Frame in einen Inline-Frame. Bevor Sie den Wert festlegen, müssen Sie zunächst überprüfen, ob ausgewählte Rahmen mit Registerkarten verfügbar sind oder nicht, indem Sie die folgenden Codes verwenden:
Javascript Code:
quelle
Null und Null sind implizite Zeiger. Wenn Sie nicht rechnen, vergleichen oder '0' auf dem Bildschirm drucken, müssen Sie es nicht tatsächlich eingeben. Es ist implizit. Wie angedeutet. Aus dem gleichen Grund ist auch Typeof nicht erforderlich. Beobachten.
if (obj) console.log ("existiert");
Ich habe keine Anfrage für ein Nicht gesehen oder sonst ist es nicht enthalten als. So sehr ich zusätzliche Inhalte liebe, die nicht in die Frage passen. Lass es uns einfach halten.
quelle
if (!maybeObject)
- aber tatsächlich fragt der Titel nach dem Gegenteil.Ich denke, es ist so einfach
quelle
Oder Sie können stattdessen alle meine exklusive Methode existest () verwenden und in der Lage sein, Dinge zu tun, die als unmöglich angesehen werden. dh:
Dinge wie:
exists("blabla")
oder sogar:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
sind auch möglich ...quelle