Paul: JS undefined

Moin,
warum bekomme ich ein "gibts" als Ausgabe, wenn mir das erste alert ein undefined gibt?

    function validateInput(field, input) {  
      alert(field);  
      if(field == undefined) alert("neu");  
      else alert("gibts");  
    }

Paul

    1. Hallo Paul,

      kennst du schon http://de.selfhtml.org/javascript/sprache/operatoren.htm#typeof@title=typeof?

      Gruß, Jürgen

      Danke

  1. function validateInput(field, input) {

    alert(field);
          if(field == undefined) alert("neu");
          else alert("gibts");
        }

      
    Besser wäre:  
    ~~~javascript
    if(field) alert("neu");  
    else alert("gibts");  
    
    

    Struppi.

    1. Hallo Struppi,

      Besser wäre:

      if(field) alert("neu");

      else alert("gibts");

        
      versagt aber, wenn field den Wert 0 hat. Bei solchen Konstruktionen muss man schon die Umstände genau kennen.  
        
      Gruß, Jürgen  
      
      
      1. Besser wäre:

        if(field) alert("neu");

        else alert("gibts");

        
        >   
        > versagt aber, wenn field den Wert 0 hat. Bei solchen Konstruktionen muss man schon die Umstände genau kennen.  
          
        Es versagt nicht unbedingt, wenn field eine Zahl ist, sollte sie auf jeden Fall initialisiert werden und auf keinen Fall undefiniert sein. Eine Unterscheidung 0 <=> undefined ist i.d.R. nicht sinnvoll, wenn man schon sowas braucht sollte man null benutzen.  
          
        Struppi.
        
        1. Hallo Struppi,

          wenn aber bei

          if(x) ...
          else ...

          der else-Zweig durchlaufen wird, kann das daran liegen, dass x den Wert 0 oder false hat, kann aber auch daran liegen, das x nicht definiert ist. Daher prüfe ich die Existenz lieber mit typeof. Sicher ist so eine Konstruktion nur, wenn nicht existieren und Wert 0 oder false gleichwertig sind. Oder anders herum

          if(x) ...

          ist nur sinnvoll, wenn für die Ausführung x existieren und im if den Wert true haben muss.

          Ich spreche das deswegen an, weil ich damit mal reingefallen bin. Ich habe in einem Script den Fall, dass ich eine Variable nur benutze, wenn sie existiert, sonst greife ich auf einen Defaultwert zu. Diese Variable kann auch den Wert false haben der Defaultwert ist aber true.

          Gruß, Jürgen

          1. Ich spreche das deswegen an, weil ich damit mal reingefallen bin. Ich habe in einem Script den Fall, dass ich eine Variable nur benutze, wenn sie existiert, sonst greife ich auf einen Defaultwert zu. Diese Variable kann auch den Wert false haben der Defaultwert ist aber true.

            Ich halte es für Problematisch, wenn eine Variabel den Typ wechseln kann. Wenn aber z.b. ein Parameter optional ist, dann ist natürlich der Test auf undefined der richtige Weg. Ansonsten sollte der einfache Vergleich ausreichen. Zumal du damit nicht in die Fallen der Typkonvertierung tappen kannst http://forum.de.selfhtml.org/archiv/2009/10/t192110/#m1281687

            Struppi.

  2. warum bekomme ich ein "gibts" als Ausgabe, wenn mir das erste alert ein undefined gibt?

    Das kann nicht sein, da musst du dich täuschen. Wenn field wirklich vom Typ undefined ist (typeof field == 'undefined'), dann kann es nicht sein, dass er in den Else-Zweig springt.

    function validateInput(field, input) {

    alert(field);
          if(field == undefined) alert("neu");
          else alert("gibts");
        }

      
    Welche Werte übergibst du denn der Funktion?  
      
    Wenn die Funktion keinen field-Parameter bekommt, also einfach validateInput() aufgerufen wird, dann ist field gleich undefined und es wird »neu« ausgegeben. Bei allen Browsern, die ich getestet habe.  
      
    Auch wenn du null übergibst (was z.B. getElementById und andere DOM-Methoden zurückgeben, wenn sie die gewünschten Elemente nicht finden), dann sollte »neu« ausgegeben werden, denn null ist auch gleich undefined.  
      
    Mathias