franc (francwalter): Vergleich mit undefinierter Variable

Hallo,
ich möchte überprüfen, ob eine Variable einen Inhalt hat.

if(meineVariable.length != "undefined")

oder

if(meineVariable.length == null)

gibt mir aber immer:

Fehler: 'meineVariable.length' ist Null oder kein Objekt

Aber das will ich doch gerade wissen, ob es Null ist. Was mach ich da wohl grundsätzlich falsch?

Gruss franc

  1. Hi franc!

    Das Problem ist, dass das Objekt meineVariable entweder NULL ist oder keine length Eigenschaft hat.

    Ergo:
    if (meineVariable && meineVariable.length)
    {
        alert ("Objekt meineVariable, Eigenschaft length nicht verfügbar...");
    }

    Grüsse,
    Richard

    1. Hi franc!

      (...)
      if (meineVariable && meineVariable.length)
      {
          alert ("Objekt meineVariable mit Eigenschaft length ist verfügbar...");
      }
      Grüsse,
      Richard

      1. (...)
        if (meineVariable && meineVariable.length)
        {
            alert ("Objekt meineVariable mit Eigenschaft length ist verfügbar...");
        }

        Hallo Richard,
        Danke, ja das geht.
        Ich hab inzwischen auch zwei Möglichkeiten gefunden:
        Einmal mit try catch block (umständlich):

        try
          {
            alert('ist definiert: ' + meineVariable.length);
          }
        catch(e)
          {
            alert('ist nicht definiert');
          }

        oder gleich meineVariable prüfen:

        if (meineVariable == null) alert ("ist null");

        Der Fehler kommt ja, weil ich versuche, das length an eine nicht definierte variable zu hängen. So gesehen ist deine Lösung natürlich am Besten!

        1. Hallo,

          oder gleich meineVariable prüfen:

          if (meineVariable == null) alert ("ist null");

          Der Fehler kommt ja, weil ich versuche, das length an eine nicht definierte variable zu hängen. So gesehen ist deine Lösung natürlich am Besten!

          Das funktioniert nur, wenn meineVariable deklariert (durch var meineVariable; oder als Funktionsparameter) ist, also den Wert undefined hat.
          Das ist was ganz anderes als »Variable existiert nicht«!
          Wenn die Variable nicht existiert, dann erzeugt if (variable) einen Fehler und das Script bricht ab.

          Der Test auf == null ist eigentlich eien Verschleierung, was du da tatsächlich prüfst ist if (meineVariable == undefined), wie gesagt. »null« ist nochmal ein gesonderter Typ. Da undefined == null gleich true ergibt, scheint es zu funktionieren.

          Da gabs letztens einen Thread zu:
          http://forum.de.selfhtml.org/archiv/2008/2/t167449/
          Dort wird auch auf try .. catch eingegangen.

          Mathias

  2. Hallo,

    if(meineVariable.length == null)

    gibt mir aber immer:

    Fehler: 'meineVariable.length' ist Null oder kein Objekt

    Nebenbei:

    Man muss wissen, dass solche Fehlermeldungen irreführend sind.

    Sie bedeutet, soweit ich das überblicke NIEMALS, dass die Eigenschaft length nicht existiert.

    Denn: Wenn du auf eine nicht existente Eigenschaft zugreifst, dann liefert JavaScript einfach undefined zurück. Das alleine löst keinen JavaScript-Fehler aus.

    Erst wenn du auf eine Eigenschaft einer nicht existenten Variable zugreifen willst, dann kommt dieser Fehler. Die Existenz einer eigenen Variable testet man am besten so:

    typeof(meineVariable) != "undefined"

    Siehe verlinkter Thread.

    Mathias