TS: Die beste Vorgehensweise: Variable nicht vorhanden

Hello,

ich möchte mal eine Frage in den Raum stellen, die ich alleine nicht lösen mag, weil mir dazu nicht alle Argumente für und wider bekannt sind:

Wie prüft man in JavaScript am besten, ob eine Variable bereits deklariert (und initialisiert) ist?

  • typeof
  • "Yoda-Prinzip", Yoda-Speak
  • prüfen gegen null
  • !
  • ...

siehe auch MDN
und Stackoverflow ist voll mit Diskussionen dazu, aber auch da gibts nicht wirklich die richtige™️ Methode

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es
  1. Tach!

    Wie prüft man in JavaScript am besten, ob eine Variable bereits deklariert (und initialisiert) ist?

    Prüfen auf undefined - ist auch eine der Möglichkeiten.

    und Stackoverflow ist voll mit Diskussionen dazu, aber auch da gibts nicht wirklich die richtige™️ Methode

    Vermutlich weil je nach Situation auch andere Vorgehensweisen sinnvoll sind. Die Suche nach dem heiligen Gral, um den selbst auf Teufel komm raus anzuwenden, finde ich nicht sinnvoll. Besser ist, die Möglichkeiten zu kennen und diese nach der Aufgabenstellung zu bewerten.

    dedlfix.

    1. Hello,

      Prüfen auf undefined - ist auch eine der Möglichkeiten.

      Ja, aber ...

      und Stackoverflow ist voll mit Diskussionen dazu, aber auch da gibts nicht wirklich die richtige™️ Methode

      Vermutlich weil je nach Situation auch andere Vorgehensweisen sinnvoll sind. Die Suche nach dem heiligen Gral, um den selbst auf Teufel komm raus anzuwenden, finde ich nicht sinnvoll. Besser ist, die Möglichkeiten zu kennen und diese nach der Aufgabenstellung zu bewerten.

      Ich suche nur nach den Vorgehensweisen mit den wenigsten "Ja, aber"s.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
      1. Tach!

        Ich suche nur nach den Vorgehensweisen mit den wenigsten "Ja, aber"s.

        Dann ist undefined wohl die beste Methode. Vor allem auch, weil beim Lesen des Quelltextes klar werden sollte, was gemeint ist.

        if (variable == undefined)

        Meinetwegen auch mit ===, aber außer null ergibt kein anderer Typ beim ==-Vergleich true. null als Inhalt ist in den meisten Fällen gleichwertig zu undefined.

        dedlfix.

        1. Hallo,

          if (variable == undefined)

          wäre das dann das Gleiche wie if (typeof(variable) == "undefined")?

          Gruß
          Jürgen

          1. Hello,

            if (variable == undefined)

            wäre das dann das Gleiche wie if (typeof(variable) == "undefined")?

            Das wäre auch meine Frage. Es besteht die (von mir bisher nicht überprüfte) Meinung, dass man eine Variable mit dem Namen 'undefined' definieren/umdefinieren könnte. Das wäre dann mMn gleichbedeutend damit, als wenn man in Pascal das 'NIL' umdefinieren könnte. Damit wäre es unsicher.

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es
            1. Tach!

              Es besteht die (von mir bisher nicht überprüfte) Meinung, dass man eine Variable mit dem Namen 'undefined' definieren/umdefinieren könnte.

              Nein, undefined ist im globalen Scope nicht beschreibbar.

              dedlfix.

          2. Tach!

            if (variable == undefined)

            wäre das dann das Gleiche wie if (typeof(variable) == "undefined")?

            Im Prinzip ja. Ich merke gerade, dass das obige Konstrukt nur anwendbar ist, wenn man es innerhalb einer Funktion verwendet, die einen Parameter mit dem Namen der Variablen hat.

            (function (foo) {
              console.log(foo == undefined);
            })();
            

            Auf eine völlig unerwähnte Variable zu prüfen, ergibt einen Fehler. Der typeof-Test hingegen läuft problemlos.

            Auf das Vorhandensein einer Variable im globalen Scope prüfen zu wollen, ist aber wohl eher Ergebnis schlechten Programmdesigns. In selbst erstellen Scopes sollte das nicht vorkommen, außer in Funktionsaufrufen, bei denen das Weglassen-Können der Parameter beabsichtigt ist.

            dedlfix.

  2. Wenn's um globale Variablen geht, was ist mit

    if (window.hasOwnProperty("foo")) ...
    

    Witzigerweise hat window.hasOwnProperty("undefined") den Wert true :)

    Rolf

    1. Tach!

      Witzigerweise hat window.hasOwnProperty("undefined") den Wert true :)

      Wieso witzigerweise? undefined ist eine Property vom global object, das im Browser windows ist.

      dedlfix.

      1. Hallo dedlfix,

        Wieso witzigerweise? undefined ist eine Property vom global object, das im Browser windows ist.

        Hihi, toller freudscher. Zum Glück ist das nicht wahr und es ist window 😂

        LG,
        CK

  3. use strict; hätte ich da noch anzubieten. MfG

  4. Hallo!

    Wie prüft man in JavaScript am besten, ob eine Variable bereits deklariert (und initialisiert) ist?

    Dieser Selfartikel beschäftigt sich mit der Frage:

    https://wiki.selfhtml.org/wiki/JavaScript/Objektabfragen

    Grüße Kollenda

    1. Hallo,

      https://wiki.selfhtml.org/wiki/JavaScript/Objektabfragen

      in diesem Artikel wird auch try - catch erwähnt. Ich verwende diese Technik, wenn eine Methode zwar existiert, aber nicht in allen Browsern mit allen Parametern umgehen kann. Hier ein Beispiel mit querySelector und einem „komplizierten“ Selector:

      var kannScope = false;
      try {
        var t1 = document.body.appendChild(document.createElement("div"));
        var t2 = document.body.querySelector(':scope > div');
        kannScope = true;	
        document.body.removeChild(t1);
      }
      catch(e) {}
      

      Gruß
      Jürgen