In PHP können Sie tun if(isset($array['foo'])) { ... }
. In JavaScript verwenden Sie häufig if(array.foo) { ... }
dasselbe, aber dies ist nicht genau dieselbe Aussage. Die Bedingung wird auch als falsch ausgewertet, wenn array.foo
sie existiert, aber ist false
oder 0
(und wahrscheinlich auch andere Werte).
Was ist das perfekte Äquivalent zu PHPs isset
in JavaScript?
Im weiteren Sinne wäre eine allgemeine, vollständige Anleitung zum Umgang mit nicht vorhandenen Variablen, Variablen ohne Wert usw. in JavaScript praktisch.
javascript
isset
Bart van Heukelom
quelle
quelle
_.isUndefined(arr.foo)
Antworten:
Ich benutze im Allgemeinen den
typeof
Operator:Es wird
"undefined"
entweder zurückgegeben, wenn die Eigenschaft nicht vorhanden ist oder ihr Wert istundefined
.(Siehe auch: Unterschied zwischen
undefined
und nicht definiert. )Es gibt andere Möglichkeiten, um herauszufinden, ob eine Eigenschaft für ein Objekt vorhanden ist, z. B. die
hasOwnProperty
Methode:Und der
in
Betreiber:Der Unterschied zwischen den letzten beiden besteht darin, dass die
hasOwnProperty
Methode prüft, ob die Eigenschaft physisch auf dem Objekt vorhanden ist (die Eigenschaft wird nicht vererbt).Der
in
Bediener überprüft alle in der Prototypenkette erreichbaren Eigenschaften, z.Wie Sie sehen können,
hasOwnProperty
gibt diese Methode bei der Überprüfung der Methode zurückfalse
und derin
Operator wird in der Prototypenkette definiert, da sie die Form erbt .true
toString
obj
Object.prototype
quelle
typeof
eher verwenden alsif( obj.foo !== undefined )
?isset($abc->def->ghi->jkl)
Gegensatz zum JavaScript-typeof
Operator , ohne eine Ausnahme auszulösen und das Skript anzuhalten . Sie müssen so etwas wietry{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
Uralter Thread, aber es gibt neue Möglichkeiten, ein Äquivalent auszuführen
isset()
.ESNext (Phase 4 Dezember 2019)
Zwei neue Syntax ermöglichen es uns, die Verwendung von
isset()
Funktionen erheblich zu vereinfachen :?.
)??
)Bitte lesen Sie die Dokumente und beachten Sie die Browserkompatibilität.
Vorherige Antwort
Siehe unten für eine Erklärung. Hinweis Ich verwende die StandardJS-Syntax
Beispiel Verwendung
Antwortfunktion
Erläuterung
PHP
Beachten Sie, dass Sie in PHP auf jede Variable in jeder Tiefe verweisen können. Selbst wenn Sie versuchen, auf ein Nicht-Array als Array zuzugreifen, wird ein einfaches
true
oder Folgendes zurückgegebenfalse
:JS
In JavaScript haben wir diese Freiheit nicht. Wenn wir dasselbe tun, wird immer eine Fehlermeldung angezeigt, da JS sofort versucht, auf den Wert von zuzugreifen,
deeper
bevor wir ihn in unsereisset()
Funktion einbinden können.Weitere fehlgeschlagene Alternativen:
Und einige funktionierende Alternativen, die schnell überflüssig werden können:
Fazit
Alle anderen Antworten - obwohl die meisten realisierbar sind ...
isset()
z
isset(some, 'nested.deeper.value')
eval()
was funktioniert, aber ich persönlich vermeideIch glaube, ich habe viel davon behandelt. In meiner Antwort mache ich einige Punkte, die ich nicht anspreche, weil sie - obwohl relevant - nicht Teil der Frage sind. Bei Bedarf kann ich meine Antwort jedoch mit Links zu einigen der technischeren Aspekte aktualisieren, je nach Bedarf.
Ich habe viel Zeit damit verbracht, hoffentlich hilft es den Leuten dabei.
Danke fürs Lesen!
quelle
phpjs.org ist größtenteils zugunsten von locutus im Ruhestand. Hier ist der neue Link http://locutus.io/php/var/isset
quelle
isset(abc.def.ghi)
fallsabc.def
undefiniert ist. Wenn Sie diese Lösung jedoch mit der kombinieren, die einen Variablennamen in Form einer Zeichenfolge akzeptiert, ist sie mit der PHP-Version identisch.quelle
quelle
Diese einfache Lösung funktioniert, jedoch nicht für die Tiefenobjektprüfung.
quelle
Ich verwende diese generische Funktion immer, um Fehler bei primitiven Variablen sowie bei Arrays und Objekten zu vermeiden.
quelle
Wenn Sie Unterstriche verwenden, verwende ich immer
quelle
Dies ist eine ziemlich kugelsichere Lösung zum Testen, ob eine Variable vorhanden ist:
Leider können Sie es nicht einfach in eine Funktion einkapseln.
Sie könnten daran denken, so etwas zu tun:
Dies führt jedoch zu einem Referenzfehler, wenn
variable
keine Variable definiert wurde, da Sie eine nicht vorhandene Variable nicht an eine Funktion weitergeben können:Auf der anderen Seite können Sie testen, ob Funktionsparameter undefiniert sind:
Obwohl kein Wert für
y
an function weitergegeben wird, funktionierttest
unsereisset
Funktion in diesem Zusammenhang einwandfrei, day
sie in functiontest
alsundefined
Wert bekannt ist.quelle
!==
ist bereits ein Boolescher Wert.Es ist zu lang, um es zu schreiben, wenn es verwendet wird. Wir können das
typeof
Schlüsselwort jedoch nicht in eine Funktion packen, da vor dem Aufruf der Funktion ein Fehler wie folgt ausgelöst wird:Also habe ich einen Weg gefunden:
Es kann sowohl mit einzelnen Variablen (Variablen, die überhaupt nicht vorhanden sind) als auch mit Objekteigenschaften (nicht vorhandene Eigenschaften) arbeiten. Und nur 7 mehr Zeichen als PHP
isset
.quelle
Diese Lösung hat bei mir funktioniert.
quelle
isset(var)
mitvar
nicht gesetzt:ReferenceError: var is not defined
quelle
isset(someVar)
wosomeVar
wurde nie deklariert. Wenn Sie dies jedoch tuneval
, beabsichtigen Sie wahrscheinlich, eine Zeichenfolge zu übergeben. Verwendung anzeigen. Ist Ihre beabsichtigte Verwendungisset('someVar')
? Wenn ja, sieht dies ähnlich aus wie diese frühere Antwort - was ist mit Ihrer Antwort neu?plus Tests:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
quelle
Um zu überprüfen, ob ein HTML-Block vorhanden ist oder nicht, verwende ich diesen Code:
quelle
Geben Sie den Objektpfad als Zeichenfolge an. Anschließend können Sie diese Zeichenfolge in einen Pfad aufteilen und auflösen
hasOwnProperty
bei jedem Schritt während Sie das Objekt selbst bei jeder Iteration überschreiben.Wenn Sie in einer ES6-Umgebung codieren, sehen Sie sich diese Stackoverflow-Fragen an .
quelle
Ich benutze eine Funktion, die Variablen und Objekte überprüfen kann. Sehr praktisch für die Arbeit mit jQuery
quelle
Es war wirklich ein Problem für mich, als ich auf eine tiefere Eigenschaft eines Objekts zugegriffen habe, also habe ich eine Funktion erstellt, die den Eigenschaftswert zurückgibt, falls vorhanden, andernfalls wird false zurückgegeben. Sie können es verwenden, um Ihre Zeit zu sparen,
quelle
Wenn Sie überprüfen möchten, ob ein Element vorhanden ist, verwenden Sie einfach den folgenden Code:
Dies ist ein Beispiel:
quelle
quelle
PHP-Handbuch sagen:
Und Schnittstelle so etwas:
bool isset ( mixed $var [, mixed $... ] )
Der Parameter
$var
ist die zu prüfende Variable. Es kann jedoch eine beliebige Anzahl von Parametern haben.isset () gibt zurück,
TRUE
wenn var existiert und einen anderen Wert als hatNULL
.FALSE
Andernfalls.Ein Beispiel:
Aus diesem Grund ist es anscheinend nicht möglich, ein genaues Äquivalent der PHP-
isset()
Funktion zu schreiben . Zum Beispiel, wenn wir so anrufen:Javascript-Trigger
Uncaught ReferenceError: some_var is not defined at (file_name):line_number
. Das Wichtige und Bemerkenswerte an diesem Verhalten ist, dass beim Versuch, nicht vorhandene Variablen an normale Funktionen zu übergeben, ein Fehler ausgelöst wird.Aber in PHP
isset()
gibt es eigentlich keine regulären Funktionen, sondern Sprachkonstrukte. Das heißt, sie sind Teil der PHP-Sprache selbst, halten sich nicht an die normalen Funktionsregeln und können daher davonkommen, keinen Fehler für nicht vorhandene Variablen auszulösen. Dies ist wichtig, wenn Sie herausfinden möchten, ob eine Variable vorhanden ist oder nicht. In Javscript wird jedoch in erster Linie ein Fehler ausgelöst, z. B. ein Funktionsaufruf mit nicht vorhandenen Variablen.Mein Punkt ist, dass wir es nicht als äquivalente Javscript-Funktion schreiben können, aber wir können so etwas tun
Wenn Sie genau den gleichen Effekt PHP wollen, überprüfen Sie auch, ob varable nicht ist
NULL
Zum Beispiel
Also können wir dies in Javascript integrieren, dann sieht es so aus:
quelle
Javascript isset
quelle
Seien Sie in ES6 vorsichtig , alle vorherigen Lösungen funktionieren nicht, wenn Sie eine Deklaration einer let-Variablen überprüfen und deklarieren möchten, wenn dies nicht der Fall ist
Beispiel
Sie werden einen Fehler sehen
Die Lösung bestand darin, es durch eine Var zu ändern
Eine andere Lösung, wenn Sie eine Let durch eine Var ändern können, müssen Sie Ihre Var entfernen
quelle
quelle