Testen Sie, ob in JavaScript etwas nicht undefiniert ist

Antworten:

345

response[0] ist nicht definiert, prüfen Sie, ob es definiert ist, und überprüfen Sie dann den Eigenschaftstitel.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
Amosrivera
quelle
20
Trotz der Anzahl der Stimmen ist dies keine gute Möglichkeit, die Prüfung durchzuführen, da undefinedes sich nicht um ein JavaScript-Schlüsselwort handelt (obwohl jeder zu glauben scheint, dass dies der Fall ist). Wenn Sie möchten, können Sie eine Variable mit dem Namen erstellen. undefinedDiese Prüfung ist dann falsch. Der einzig richtige Weg ist zu überprüfen (typeof myVar !== 'undefined').
BadHorsie
4
@BadHorsie macht Sinn, ich habe die Antwort mit Ihrem Kommentar aktualisiert.
Amosrivera
1
Was ist, wenn eine Variable vorhanden ist und die Zeichenfolge "undefiniert" enthält?
TomeeNS
@BadHorsie Dein Argument ist falsch. Warum sollte ich neu definieren undefined?
Robert Siemer
@amosrivera Nein, sein / ihr Kommentar ergab keinen Sinn. Sie haben Ihre Antwort verschlechtert.
Robert Siemer
39

Überprüfen Sie einfach, ob response[0]undefiniert ist:

if(response[0] !== undefined) { ... }

Wenn Sie den Titel noch explizit überprüfen müssen, tun Sie dies nach der ersten Überprüfung:

if(response[0] !== undefined && response[0].title !== undefined){ ... }
Rion Williams
quelle
35

Ich hatte Probleme mit allen anderen Codebeispielen oben. In Chrome war dies die Bedingung, die für mich funktioniert hat:

typeof possiblyUndefinedVariable !== "undefined"

Ich muss das in anderen Browsern testen und sehen, wie es wohl läuft.

Karl Henselin
quelle
2
Das Gleiche - ich fand undefined, dass es eine Schnur sein musste.
Remarsh
Das muss etwas Neues mit Chrom sein (ich bin auf Win Chrome 41 atm). Die akzeptierte Antwort funktionierte einwandfrei! : P
Joe
13

Eigentlich müssen Sie es mit einem Try / Catch-Block umgeben, damit Ihr Code nicht aufhört zu funktionieren. So was:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
André Luiz
quelle
Ich habe mir IE 8 angesehen und musste einen Versuch machen.
RonanOD
1
Dies ist der beste Weg, wenn Sie testen, ob eine Funktion undefiniert ist
edepperson
Es ist keine gute Lösung, einen Fehler zu werfen, um undefiniert zu überprüfen. @amosrivera ist die beste Lösung.
user3658423
@ user3658423: Es wird kein Fehler ausgegeben. Es verhindert nur, dass das Skript gestoppt wird, wenn die Antwort nicht deklariert ist (da dies einen Fehler auslösen würde).
André Luiz
Manchmal können Fehler hilfreich sein. Wenn bei Ihrer vorgeschlagenen Lösung doSomething () eine Ausnahme auslöst, wird in Ihrer Konsole lediglich "responde [0] .title is undefined" anstelle einer nützlichen Meldung zu einer "nicht abgefangenen Ausnahme in Zeile 123 der Datei xyz" angezeigt .js ". Möglicherweise wird ein zweiter Entwickler die Anweisung console.log () auskommentieren, was es für einen dritten Entwickler schwieriger macht, einen Fehler zu beheben, der tief in doSomething () auftritt.
Eric Seastrand
9

Art der:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}
Jeffrey Mark Baldridge
quelle
1

Es wird sein, weil response[0]selbst undefiniert ist.

DavidGouge
quelle
1

Überprüfen Sie, ob condition == null; Es wird das Problem lösen

Tanmay Chandra
quelle
1
Dies sollte ein Kommentar sein
ρяσssρєя K
0

Überprüfen Sie, ob Sie response[0]tatsächlich existieren. Der Fehler scheint darauf hinzudeuten, dass dies nicht der Fall ist.

Exelian
quelle
0

Sie müssen zuerst prüfen, ob response[0]undefiniert ist, und nur wenn dies nicht der Fall ist, den Rest prüfen. Das bedeutet, dass in Ihrem Fall response[0]undefiniert ist.

Alex Turpin
quelle
0

Ich weiß, dass ich 7 Monate zu spät hierher gekommen bin, aber ich habe diese Fragen gefunden und sie sehen interessant aus. Ich habe dies auf meiner Browserkonsole versucht.

try{x,true}catch(e){false}

Wenn die Variable x undefiniert ist, wird ein Fehler abgefangen und ist falsch. Wenn nicht, wird true zurückgegeben. Sie können also die eval-Funktion verwenden, um den Wert auf eine Variable festzulegen

var isxdefined = eval('try{x,true}catch(e){false}')
AngeLOL
quelle
1
Ein interessanter Ansatz, wenn ich es selbst sagen darf.
Brandito
0

In einigen dieser Antworten gibt es ein grundlegendes Missverständnis hinsichtlich der Verwendung typeof.

Falsch

if (typeof myVar === undefined) {

Richtig

if (typeof myVar === 'undefined') {

Der Grund ist, dass typeofeine Zeichenfolge zurückgegeben wird. Daher sollten Sie überprüfen, ob die Zeichenfolge "undefiniert" zurückgegeben wurde und nicht undefined(nicht in Anführungszeichen eingeschlossen), die selbst einer der primitiven Typen von JavaScript ist . Der typeofOperator gibt niemals einen Wert vom Typ zurück undefined.


Nachtrag

Ihr Code funktioniert möglicherweise technisch, wenn Sie den falschen Vergleich verwenden, aber wahrscheinlich nicht aus dem Grund, den Sie denken. undefinedIn JavaScript gibt es keine bereits vorhandene Variable - es ist kein magisches Schlüsselwort, mit dem Sie Dinge vergleichen können. Sie können tatsächlich eine Variable mit dem Namen erstellen undefinedund einen beliebigen Wert angeben.

let undefined = 42;

Und hier ist ein Beispiel, wie Sie damit beweisen können, dass die erste Methode falsch ist:

https://jsfiddle.net/p6zha5dm/

BadHorsie
quelle