JavaScript überprüfen ob variable existiert (ist definiert/initialisiert)
Welche Methode der Prüfung, ob eine variable initialisiert wurde ist besser/richtig?
(Vorausgesetzt, die variable halten konnte, alles andere (string, int, object, Funktion, etc.))
if (elem) { //or !elem
oder
if (typeof(elem) !== 'undefined') {
oder
if (elem != null) {
wenn Sie wissen möchten, ob
foo
deklariert ist, entweder typeof foo === 'undefined'
oder typeof foo === typeof undefined
InformationsquelleAutor Samuel Liew | 2011-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst die
typeof
- operator. Speziell:Eigentlich sollte man überprüfen, dass das Objekt, was Sie brauchen, es zu sein. Das wäre also if( typeof console == 'object' ) { // variable ist, was ich brauche, es zu sein }
IV: "just do `if( variable )" -- äh, Nein, nicht, dass für falsche und 0.
'wenn( variable )' auch nicht zum testen für die Existenz von Objekt-Eigenschaften.
Tatsächlich, das wird einen Fehler auslösen, wenn die variable nicht definiert ist.
InformationsquelleAutor Jim Puls
Den
typeof
operator wird überprüft, ob die variable wirklich nicht definiert.Den
typeof
Betreiber, im Gegensatz zu den anderen Betreibern, nicht werfen ReferenceError Ausnahme, wenn eine nicht deklarierte variable.Allerdings tun beachten Sie, dass
typeof null
zurück"object"
. Wir müssen vorsichtig sein, um Fehler zu vermeiden initialisieren eine variable, umnull
. Um sicher zu sein, das ist, was wir verwenden könnten, statt:Weitere Infos auf der strikte Vergleich
===
statt einfacher Gleichheit==
finden Sie unter:Die ist-gleich-operator (== vs ===) verwendet werden soll, in JavaScript Vergleiche?
if(! variable_here)
brechen in vielen Fällen. Wenn die variable 0 oder falsch wird es scheitern. Das ist nicht, was Sie wollen.kann nicht entscheiden, ob up Stimmen Sie diesem. Streng genommen sind die
typeof foo === "undefined"
ist richtig, und besser als die top-Antwort gestimmt, aber die zusätzliche Notizen machen nur diese Antwort ist verwirrend.Wie ist das nicht ein Duplikat von stackoverflow.com/a/519157 ?
Überprüfen Sie die timeline. Die top-Antwort zusammengeführt wurde aus eine andere Frage nach dieser Antwort gepostet wurde
InformationsquelleAutor Samuel Liew
In JavaScript kann eine variable definiert werden, aber den Wert
undefined
, so die häufigste Antwort ist technisch nicht korrekt, und stattdessen führt die folgenden:Das mag ausreichen für deine Zwecke. Der folgende test hat einfachere Semantik, die es einfacher macht, genau zu beschreiben, Ihr code, der das Verhalten und die es verstehen, sich selbst (wenn Sie solche Sachen interessieren):
Diese, natürlich, vorausgesetzt, Sie sind in einem browser ausgeführt wird (wo
window
ist ein name für das Globale Objekt). Aber wenn Sie mucking um mit globals wie diese sind Sie wahrscheinlich in einem browser. Subjektiv, mit'name' in window
ist stilistisch konsistent mitwindow.name
zu finden globals. Zugriff auf globals als Eigenschaften vonwindow
anstatt als Variablen können Sie minimieren die Zahl der nicht deklarierten Variablen, die Sie verweisen in Ihrem code (zum nutzen von linting), und vermeidet die Möglichkeit, Ihre Globale überschattet von einer lokalen Variablen. Auch, wenn globals machen Ihre Haut kriechen, könnten Sie fühlen sich wohler, berühren Sie Sie nur mit dieser vergleichsweise langen Stock.Dieser wird nur geprüft, wenn die variable Global definiert. Wenn Sie die Codierung richtig, dann Schränken Sie Ihre Globale vars. Es wird fälschlicherweise für lokale vars: (function() { var sdfsfs = 10; console.log( "sdfsfs" im Fenster");}) () `
Dies ist die beste f$#^%ing beantworten. Ich war auf wit ' s end auf diesem zu versuchen, um herauszufinden, wie Konto für genau diese Ecke Fall. Genial. Hatte keine Ahnung, Sie könnten dies tun.
Heads-up: Ihre Antwort wurde migriert hier aus der stackoverflow.com/questions/519145/...
Funktioniert es nur bei globalen Variablen oder lokal deklariert werden (z.B. innerhalb von Schleifen) so gut?
InformationsquelleAutor Brian Kelley
In vielen Fällen mit:
wird der job für Sie tun!... dieser wird überprüfen Sie diese unten aufgeführten Fälle:
undefined
''
So wird es Abdeckung Art der Fälle, aber es gibt immer seltsame Fälle, die wir möchten, zu decken, wie auch, zum Beispiel, eine Zeichenfolge mit Leerzeichen, wie diese
' '
eines, das definiert werden soll, in javascript, da es Leerzeichen im string... zum Beispiel in diesem Fall fügen Sie eine weitere Prüfung mit trim(), wie:Auch, diese Prüfungen sind für Werte nur als Objekte und arrays funktionieren anders in Javascript, leeres array
[]
und leeres Objekt{}
sind immer wahr.Erstelle ich das Bild unten, um zu zeigen, eine schnelle kurze Antwort:
schön! Ihre Antwort wird helfen, eine Menge Menschen da draußen. Ich schon auswendig, diese falsy-Werte, die nur Sache, dass ich nicht sicher war, was [].
Ich bekomme ein "ReferenceError: elem ist nicht definiert"
es ist, weil Sie gar nicht definieren, das Element zu überprüfen, was es ist , wenn es Ihr Fall ist, müssen Sie überprüfen Sie es mit typeof(elem)==="string" das ist bereits erwähnt...
Dann ist die Antwort irreführend, wenn er sagt
if(elem)
überprüft undefined (während es gibt nicht definierter Fehler), ist es nicht?InformationsquelleAutor Alireza
In der Mehrzahl der Fälle, die Sie verwenden würden:
Im Gegensatz zu einem einfachen
if (elem)
ermöglicht es0
,false
,NaN
und''
, lehnt abernull
oderundefined
, so dass es eine gute, Allgemeine test für das Vorhandensein eines Arguments oder einer Eigenschaft eines Objekts.Die anderen Prüfungen sind nicht falsch, Sie müssen nur anders verwendet:
if (elem)
: kann verwendet werden, wennelem
garantiert werden, um ein Objekt, oder wennfalse
,0
usw. als "default" - Werte (also äquivalent zuundefined
odernull
).typeof elem == 'undefined'
kann verwendet werden, in Fällen, in denen eine angegebenenull
hat einen ausgeprägten Sinn zu einem uninitialised variable oder Eigenschaft.elem
ist nicht erklärt (d.h. keinevar
Aussage, nicht eine Eigenschaft derwindow
oder keine Funktion-argument). Dies ist, meiner Meinung nach, eher gefährlich, da es erlaubt, Tippfehler zu unbemerkt. Um dies zu vermeiden, finden Sie in der unten Methode.Ebenfalls hilfreich, ist ein strenger Vergleich gegen
undefined
:Jedoch, da die Globale
undefined
kann überschrieben werden, mit einem anderen Wert, ist es am besten, um die variable zu deklarierenundefined
im aktuellen Bereich vor der Verwendung:Oder:
Ein zweiter Vorteil dieser Methode ist, dass JS minifiers kann, reduzieren Sie die
undefined
variable auf ein einzelnes Zeichen, spart man sich ein paar bytes zu jeder Zeit.undefined
. Ich glaube nicht einmal, dass ' s erwähnenswert, die in der Antwort. Wohl die einzigen schlimmsten akzeptabel variable name in allen Javascript.Dies führt zu einer Ausnahme und setzt Voraus, dass Sie
window.
bevor die variable verwendet, wenn im globalen Kontext...dies ist nicht der beste Weg.Denn in dieser wichtigsten Frage sollten Sie sich IMMER mit
void(0)
stattundefined
.+1, da diese Antwort weist darauf hin, dass Sie eventuell tatsächlich wollen zu identifizieren
false
,0
usw. als ungültige Werte.InformationsquelleAutor David Tang
Wie um zu überprüfen, ob eine variable vorhanden ist,
Dies ist eine ziemlich ultimative Lösung für die Prüfung, ob eine variable vorhanden ist und initialisiert wurde :
Es ist am häufigsten verwendet, in Kombination mit einem ternärer operator um einen Standard-im Falle, dass eine bestimmte variable nicht initialisiert wurde :
Probleme mit der Kapselung
Leider können Sie sich nicht einfach Kapseln der check-in-Funktion.
Könnte man denken, etwas wie das zu tun :
Jedoch, dies wird produzieren ein Verweis Fehler, wenn Sie anrufen zB.
isset(foo)
und variablefoo
wurde nicht definiert, da kann man nicht weitergeben, eine nicht vorhandene variable an eine Funktion :Testen, ob die Parameter der Funktion sind undefiniert
Während unsere
isset
- Funktion kann nicht verwendet werden, um zu testen, ob eine variable vorhanden ist oder nicht (für die Gründe erläutert hereabove), es erlaubt uns zu testen, ob die Parameter einer Funktion sind nicht definiert :Obwohl kein Wert für
y
weitergegeben, um die Funktiontest
unsereisset
- Funktion funktioniert perfekt in diesem Zusammenhang, weily
bekannt ist in der Funktiontest
alsundefined
Wert.InformationsquelleAutor John Slegers
Es ist ein weiterer kurzer hand Weg, um dies zu überprüfen, wenn Sie führen einfache Zuordnungen und die zugehörigen Prüfungen. Verwenden Sie einfach Bedingter (Ternärer) Operator.
Auch dies hilfreich sein, wenn Sie versuchen zu erklären, dass die Globale variable mit der Instanz Zuweisung von Referenzvariablen.
Wenn Sie wollten, um zu überprüfen, variable sollte nicht
undefined
odernull
. Dann führen Sie die unten überprüfen., Wenn die variable deklariert ist, und wenn Sie wollen, überprüfen Sie den Wert, ist das sogar noch Einfacher: und es würde
undefined
undnull
Prüfungen zusammen.typeof(booooo)
ist"undefined"
danntypeof(typeof boooooo)
ist"string"
undtypeof boooooo && true
ist immertrue
. @John-Slegers' Antwort ist in etwa so abgekürzt, wie Sie erhalten können mit typeof.absolut korrekte Antwort. Hier ist ein arbeiten Fiddle. Und ich weiß nicht, welches Szenario du sprichst. Die Fragen über die Check-variable Existenz.
Sagen Sie nicht Flach falsch. Beweisen. Suche nach einem Fehler ist wirklich einfach, sondern Sie können Gute Antworten hier!!!. Wenn die Antwort ist flach falsch 28 Programmierer wäre nicht up-gestimmt, ohne zu prüfen, meine Antwort. Da gibt es viele renommierte Antworten hier, Sie haben könnte, bis-zum, dass, das nicht.
jsfiddle.net/o5mzrsfc/3
2. überprüfen Sie scheitern wird mit dem Wert 0
InformationsquelleAutor RajeshKdev
Hängt es ab, wenn Sie nur Sorge, dass die variable definiert wurde oder wenn Sie wollen, dass es einen sinnvollen Wert.
Prüfen, ob der Typ nicht definiert ist, wird prüfen, ob die variable definiert wurde, ist noch.
=== null
oder!== null
wird nur prüfen, ob der Wert der variable ist genaunull
.== null
oder!= null
wird überprüft, ob der Wertundefined
odernull
.if(value)
wird prüfen, ob die variable istundefined
,null
,0
oder eine leere Zeichenfolge.InformationsquelleAutor Alan Geleynse
Den höchsten Antwort korrekt ist, verwenden Sie typeof.
Was ich aber hinweisen wollte war, dass in JavaScript
undefined
ist veränderlich (für einige Gottlosen Grund). Also einfach ein check fürvarName !== undefined
hat das Potenzial, um nicht immer wieder, wie Sie es erwarten, weil andere libs geändert haben könnten, nicht definiert. Ein paar Antworten (@skalee ist, für einen), scheinen zu bevorzugen, die nicht mittypeof
, und das konnte man in Schwierigkeiten.Dem "alten" Weg, dies zu behandeln war deklarieren undefinierter als var offset potenzielle muting - /über-Reiten der
undefined
. Jedoch, der beste Weg ist immer noch zu verwendentypeof
weil es ignorieren, überspielen vonundefined
aus anderen code. Vor allem, wenn Sie code schreiben, die für den Einsatz in der wildnis, wo wer weiß was sonst noch sein könnte, läuft auf der Seite...varName !== undefined
wird nur zu einem ReferenceError. Die Veränderlichkeit derundefined
keine Rolle.Heads-up: Ihre Antwort wurde migriert hier aus der stackoverflow.com/questions/519145/...
In neueren Javascript-Versionen
undefined
ist ein nur-lese-Eigenschaft. Allerdings werden kugelsichere können Sietypeof mvVar === typeof void 0
.void 0
zurückundefined
immer.InformationsquelleAutor shadowstorm
Oder besser
Funktioniert in allen Browsern
Ich Stimme zu, dass letzteres besser ist. Dies aus dem einfachen Grund, dass Sie überprüfen, ob die Typen sind die, die Sie wollen, bevor Sie Sie verwenden.
Heads-up: Ihre Antwort wurde migriert hier aus der stackoverflow.com/questions/519145/...
InformationsquelleAutor boslior
Ist es schwierig zu unterscheiden zwischen undefined und null. Null ist ein Wert, den Sie zuweisen können, um eine variable, wenn Sie wollen, um anzuzeigen, dass die variable hat keinen besonderen Wert. Undefined
ist ein besonderer Wert, wird der default-Wert von nicht zugewiesenen Variablen.
Vereinbart, aber statt der darauf hindeutet, Bearbeiten, warum nicht einfach machen? Die option gibt es für einen Grund. Manche halten es für unhöflich, ich halte es für effizienter - so editiert die Antwort selbst (pending review).
Ich schaute auf die edit-history und kann erraten, warum Ihre änderungen wurden abgelehnt..., anstatt nur das hinzufügen von Linien, um zu zeigen, was der Ausgang sein würde, als demisx vorgeschlagen, Sie wesentlich verändert, was Jith gepostet hatte.
InformationsquelleAutor Jith
Null ist ein Wert in JavaScript und
typeof null
zurück"object"
Daher akzeptierte Antwort wird nicht funktionieren, wenn Sie übergeben Sie null-Werte. Wenn Sie null-Werte, müssen Sie fügen Sie eine zusätzliche überprüfung auf null-Werte:
InformationsquelleAutor Razan Paul
können Sie die
typeof
Betreiber.Beispielsweise
Obigen code-snippet zurück, die Ausgabe wie
InformationsquelleAutor Ravindra Miyani
Diese Antworten (abgesehen von den Fred Gandt-Lösung ) sind alle entweder falsch oder unvollständig.
Nehme an, ich brauche meine
variableName;
zu tragenundefined
Wert, und deshalb wurde erklärt, in einer Art und Weise, wievar variableName;
was bedeutet, es ist bereits initialisiert; - Wie kann ich prüfen, ob es bereits erklärt?Oder noch besser - wie kann ich sofort überprüfen, ob "Mappe1.chapter22.paragraph37" existiert mit einem einzigen Aufruf, aber steigen nicht ein Verweis Fehler?
Machen wir es mit den mächtigsten JasvaScript Betreiber, die in Betreiber.:
In Zeiten von AJAX, die den Höhepunkt der Popularität, die ich geschrieben habe eine Methode (wird später benannt) isNS (), die geeignet ist, zu bestimmen, wenn der namespace vorhanden ist, einschließlich tiefen-tests für den property-Namen wie "Mappe1.chapter22.paragraph37" und vieles mehr.
Aber da hat es zuvor veröffentlicht wurde und wegen seiner großen Bedeutung, die es verdient, veröffentlicht zu werden in einem separaten thread werde ich nicht hier posten sondern wird keywords (javascript + isNS - ), die wird Ihnen helfen, suchen Sie den source-code gesichert, mit allen notwendigen Erklärungen.
in
Betreiber nur tests für die Eigenschaft der Existenz, und nicht alle Variablen sind Eigenschaften --const
undlet
Erklärungen nicht (undconst
sind auch nicht gut, Variablen).const
undlet
standardisiert wurden mit ECMAScript 2015, veröffentlicht mehr als vor 3 Jahren und hat da gesehen, gute Annahme durch die üblichen verdächtigen und ist eher greifenden heute, ich wage zu sagen -- es gibt mehr als 2 Millionen vorkommen von "const" auf Github in JS-Dateien.InformationsquelleAutor Bekim Bacaj
Stabilste "ist es nicht definiert' check ist mit typeof
Wenn Sie gerade die Prüfung für eine benutzerdefinierte variable zuordnen, die standardmäßig für eine leicht zu Lesen, ein liner
oft können Sie dies tun:
Oft ist es in Ordnung zu verwenden, siehe: Idiomatische Weise, legen Sie Standard-Wert in javascript
Gibt es auch noch dazu eine liner mit der typeof Stichwort:
InformationsquelleAutor Zv_oDD
In der besonderen situation skizziert, in der Frage,
ist identisch mit
Ich bevorzuge letzteres, da es kürzer ist.
Bitte beachten Sie, dass wir schauen für
console
nur im globalen Gültigkeitsbereich (der einwindow
Objekt in allen Browsern). In dieser besonderen situation ist es wünschenswert,. Wir wollen nichtconsole
definiert an anderer Stelle.@BrianKelley in seiner großen Antwort erläutert technische details. Ich habe nur fehlende Abschluss und verdaut es in etwas leichter zu Lesen.
Falsch. letzteres wirft eine Ausnahme in meiner Konsole.
InformationsquelleAutor skalee
Verwende ich zwei verschiedene Möglichkeiten, je nach Objekt.
Manchmal will ich nicht zu bewerten, wird eine leere Zeichenfolge als falsey, so dann habe ich diesen Fall
Wenn Sie müssen, im Gegenteil, dann in der ersten Instanz !variable wird !!variable, und die ungültige Funktion === werden != und die Funktionsnamen änderungen notInvalid.
InformationsquelleAutor SoEzPz
Meine Vorliebe ist
typeof(elem) != 'undefined' && elem != null
.Aber Sie wählen, sollten Sie die check-in Funktion wie so
Wenn Sie nicht wissen, die variable deklariert ist, dann weiter mit
typeof (x) != 'undefined' && x != null;
Denen Sie wissen, dass die variable deklariert ist, kann aber nicht existy, Sie könnte verwenden
Die variable, die Sie prüfen kann ein nested-Eigenschaft manchmal. Sie können requisite || {} zu gehen die Zeile überprüfen der Existenz der Eigenschaft in Frage:
Nach jeder Eigenschaft zu verwenden (...' || {}').nextProp so, dass eine fehlende Eigenschaft wird nicht werfen einen Fehler.
Oder verwenden Sie existy wie
existy(o) && existy(o.p) && existy(o.p.q) && doSomething(o.p.q)
typeof (x) != 'undefined' && x != null
entsprichtx != null
wennx
deklariert ist.InformationsquelleAutor curtwphillips
Kurzer Weg zum test wird eine variable nicht deklariert (nicht undefined) ist
Ich fand es nützlich für die Erkennung von Skript-Ausführung außerhalb des Browsers (nicht mit erklärt
window
variable).InformationsquelleAutor user2878850
Es hängt von der situation ab. Wenn Sie überprüft haben, für etwas, das kann oder kann nicht definiert wurden weltweit außerhalb Ihres Codes (wie jQuery, vielleicht) Sie wollen:
(Keine Notwendigkeit für strikte Gleichheit gibt es, typeof immer eine Zeichenfolge zurück.) Aber wenn Sie Argumente an eine Funktion, die möglicherweise oder möglicherweise nicht bestanden, werden Sie immer definiert werden, aber null, wenn Sie weggelassen werden.
InformationsquelleAutor jpsimons
Ich bin überrascht, dass dies war nicht erwähnt, aber...
hier sind ein paar zusätzliche Varianten mit
this['var_name']
der Vorteil der Verwendung dieser Methode, kann es verwendet werden, bevor eine variable definiert ist.
InformationsquelleAutor Daniel
Überprüfen, ob eine variable deklariert wurde/set habe ich diese schmutzigen trick.
Habe ich noch keinen Weg gefunden, extrahieren Sie den code, um eine Funktion, auch mit
eval
.InformationsquelleAutor Ferran Maylinch