Umgang mit ‘undefiniert’ in JavaScript [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Madhu

Mögliches Duplikat:

Erkennen einer undefinierten Objekteigenschaft in JavaScript

Aus dem folgenden JavaScript-Beispiel

try {
    if(jsVar) {
        proceed();
    }
}
catch(e) {
    alert(e);
}

diese jsVar wird in einer anderen Datei deklariert und initialisiert.

Das Problem ist, dass der Code einen undefinierten Fehler auslöst, wenn dieser Code ausgeführt wird, bevor die andere Datei (wo sie deklariert und initialisiert ist) ausgeführt wird. Deshalb ist es von Try and Catch umgeben.

Was ist der beste Weg, um mit diesem undefinierten Fehler umzugehen, als zu versuchen, catch?

  • Ich verstehe es nicht. Wie kommt es, dass diese Frage auch nach der Markierung als Duplikat immer noch 48 Stimmen erhalten hat? Ist es nicht ein Mangel an Urteilsvermögen und verringert die Qualität dieser positiven Stimmen? Und dann könnte die Abstimmung fehlschlagen, wenn doppelte Fragen zu Stimmen führen.

    – Jyotibist

    19. Oktober 2018 um 22:34 Uhr

Benutzer-Avatar
alex.zherdev

Sie können die Tatsache mit überprüfen

if (typeof jsVar == 'undefined') {
  ...
}

  • Hat das einen Vorteil gegenüber “meinem” Weg?

    – Jan Hancic

    31. Dezember 2009 um 9:54 Uhr

  • Es kann einen Fehler ausgeben: jsVar ist nicht definiert. Sie sollten es auf diese Weise testen: if (window.jsVar !== undefined) {}. Es scheint, als ob typeof() diesen Fehler “abfängt”.

    – Fabien Menager

    31. Dezember 2009 um 10:15 Uhr

  • @Fabien: Oder verwende vielleicht if(“jsVar” in window){}… aber ich würde Code vermeiden, der für diesen Fehlerfall Codierung erfordern würde.

    – Thomas Eding

    1. Januar 2010 um 9:51 Uhr


  • @logic-unit das ist theoretisch besser, aber == reicht für a typeof Vergleich, da es nur eine gibt wenige mögliche Werte das kann man zurückgeben.

    – berbt

    9. Mai 2014 um 20:00 Uhr


  • Mit typeof können Sie den Typ des nicht ausgewerteten Operanden bestimmen. Es gibt den Typ des Operanden in einer Zeichenfolge zurück. Sie können “===” verwenden, wenn Sie wissen, dass sie den gleichen Wert und den gleichen Typ haben.

    – DevBert

    30. Juli 2015 um 9:31 Uhr

Wie so oft bei JavaScript gibt es mehrere Möglichkeiten, dies zu tun:

typeof foo !== 'undefined'
window.foo !== undefined
'foo' in window

Die ersten beiden sollten gleichwertig sein (solange foo wird nicht von einer lokalen Variablen überschattet), während die letzte zurückgegeben wird true wenn die globale Variable definiert, aber nicht initialisiert (oder explizit auf gesetzt ist undefined).

  • hmm ‘foo’ in Windows scheint false zurückzugeben, auch wenn foo für mich definiert ist, tatsächlich scheint nur typeof in meinem Fall zu funktionieren

    – Sicherungsteam

    29. Juli 2020 um 23:35 Uhr


Benutzer-Avatar
Scott

In JavaScript bewirken die folgenden Werte die if Bedingung fehlschlagen und ihre Anweisung nicht ausführen: null, undefiniert, falsch, NaN, die Zahl 0 und die leere Zeichenkette ”.

Unter der Annahme, dass die Variable jsVar ein boolescher Wert ist und wir die Methode continue() aufrufen möchten, wenn jsVar wahr ist, können wir die folgende Überprüfung durchführen.

if (jsVar && jsVar == true)
    proceed();

Das obige Code-Snippet überprüft zuerst, ob jsVar definiert wurde, und überprüft dann, ob sein Wert wahr ist. Die if-Bedingung wird nur erfüllt, wenn beide Bedingungen erfüllt sind.

Wenn jsVar kein boolescher Wert ist, können wir im obigen Code jsVar == true durch die entsprechende Prüfung ersetzen.

  • Denken Sie daran, dass dies nicht auf boolesche Werte prüft true da Sie keinen strengen Vergleich verwenden (in JS, z '1' == true ist wahr!); dies wird auch dann noch den Referenzfehler auslösen, wenn die Variable nicht definiert wurde, dh Ihr Code löst das Problem von Madhu nicht

    – Christoph

    31. Dezember 2009 um 10:46 Uhr

  • @Christoph du hast recht!

    – Scott

    31. Dezember 2009 um 13:54 Uhr

1159120cookie-checkUmgang mit ‘undefiniert’ in JavaScript [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy