Manuel: Was bedeutet dieser Code?

Hallo,

kann mir jemand sagen, was dieser Code bedeutet und wo ich was dazu bei SELFHTML finden kann?:

if (!variable)

ich meine, daß die if-Funktion überprüfen soll, ob die Variable existiert, bin mir aber nicht sicher.

Danke

  1. Hallo,

    kann mir jemand sagen, was dieser Code bedeutet und wo ich was dazu bei SELFHTML finden kann?:

    if (!variable)

    ich meine, daß die if-Funktion überprüfen soll, ob die Variable existiert, bin mir aber nicht sicher.

    im Gegenteil, es wird geprüft, ob sie NICHT existiert! :-)

    1. im Gegenteil, es wird geprüft, ob sie NICHT existiert! :-)

      Das ist falsch!

      das tut man so:

      if(typeof variable == 'undefined')

      Struppi.

    2. if (!variable)
      im Gegenteil, es wird geprüft, ob sie NICHT existiert! :-)´

      Bißchen Humbug. Das Vorhandensein einer Variable überprüft man mit einem Test gegen null. Das gleiche gilt für Methoden, Properties und Objekte. Per Definition (und so tun's viele UAs) wird bei if(variable) überprüft, ob variable==true. Also prüft !variable, ob variable==false. Die Tatsache, daß eine UAs bei Nichtvorhandensein von variable fröhlich weitermachen, ist lediglich - nennen wir es Toleranz. Genauso wie einige Spezialitäten beim Type Casting. Wer sauber auf allen UAs sein will, sollte nicht in den Code-Schlunz verfallen :)

      1. if (!variable)
        im Gegenteil, es wird geprüft, ob sie NICHT existiert! :-)´

        Bißchen Humbug. Das Vorhandensein einer Variable überprüft man mit einem Test gegen null. Das gleiche gilt für Methoden, Properties und Objekte. Per Definition (und so tun's viele UAs) wird bei if(variable) überprüft, ob variable==true. Also prüft !variable, ob variable==false. Die Tatsache, daß eine UAs bei Nichtvorhandensein von variable fröhlich weitermachen, ist lediglich - nennen wir es Toleranz. Genauso wie einige Spezialitäten beim Type Casting. Wer sauber auf allen UAs sein will, sollte nicht in den Code-Schlunz verfallen :)

        Ahhhhh, nein auch das nicht.
        Eine nicht definierte Variabel hat KEINEN wert - auch nicht null.

        eine nicht definierte Variabel prüft man mit dem typeof operator.
        und if(!x) prüft auch auf Strings Zahlen oder Objekte.

        Struppi.

        1. if (!variable)
          Bißchen Humbug. Das Vorhandensein einer Variable überprüft man mit einem Test gegen null. Das gleiche gilt für Methoden, Properties und Objekte.

          Ahhhhh, nein auch das nicht.
          Eine nicht definierte Variabel hat KEINEN wert - auch nicht null.

          eine nicht definierte Variabel prüft man mit dem typeof operator.
          und if(!x) prüft auch auf Strings Zahlen oder Objekte.

          Nun aber richtig: in JS<1.1 kann man nur gegen null prüfen. Dies knallt, wenn man direkt eine nicht deklarierte Variable abfragt. Fragt man sie hingegen als Eigenschaft des window-Objekts ab, klappt's. Genauso gibt's keine Probleme bei Unterobjekten etc.
          In JS>=1.1&&JS<1.3 gibt's typeof. Hier kann man mit typeof prüfen, ob die Variable vorhanden ist bzw. ob sie noch keinen Wert zugewiesen bekommen hat. Eine Unterscheidung gibt's hier nicht.
          Ab JS 1.3 kann ich mit einem kleinen Trick unterscheiden, ob sie nicht deklariert wurde, oder ob sie deklariert wurde, aber ihr kein Wert zugewiesen wurde:

          var keinwertzugewiesen;

          if (typeof nichtda == 'undefined') {
              if (window.nichtda === keinwertzugewiesen)
                  alert("da, aber kein wert zugewiesen");
              else
                  alert("nicht da");
          }

          Dennoch halte ich es für fraglich, ob der Test gegen null deprecated ist. Und einen ! gegen null habe ich schon in die Hose gehen sehen (bei einer der allseits beliebten Prüfungen auf document.all etc.)

          1. Nun aber richtig: in JS<1.1 kann man nur gegen null prüfen. Dies knallt, wenn man direkt eine nicht deklarierte Variable abfragt. Fragt man sie hingegen als Eigenschaft des window-Objekts ab, klappt's. Genauso gibt's keine Probleme bei Unterobjekten etc.

            Dann ist es eine Eigenschaft eines Objektes und keine nicht vorhanden/ nicht deklarierte Variabel, das ist ein Unterschied.

            In JS>=1.1&&JS<1.3 gibt's typeof. Hier kann man mit typeof prüfen, ob die Variable vorhanden ist bzw. ob sie noch keinen Wert zugewiesen bekommen hat. Eine Unterscheidung gibt's hier nicht.

            Nein, nur ob sie deklariert wurde (und typeof funktionierte schon im Netscape 3.x, keine Ahnung welche Version das ist).

            var x;
            alert(typeof x);

            Ab JS 1.3 kann ich mit einem kleinen Trick unterscheiden, ob sie nicht deklariert wurde, oder ob sie deklariert wurde, aber ihr kein Wert zugewiesen wurde:

            var keinwertzugewiesen;

            if (typeof nichtda == 'undefined') {
                if (window.nichtda === keinwertzugewiesen)

            Nein, hier reicht if(!keinwertzugewiesen)

            javascript:var x ;alert(!x);

            Genau wie es im Ausgangsposting beschrieben wurde.

            Dennoch halte ich es für fraglich, ob der Test gegen null deprecated ist. Und einen ! gegen null habe ich schon in die Hose gehen sehen (bei einer der allseits beliebten Prüfungen auf document.all etc.)

            ! prüft auf gleich: null, 0, "", false und ist falsch wenn ungleich null, ungleich 0, kein leerstring oder true.

            Struppi.

            1. Nun aber richtig: in JS<1.1 kann man nur gegen null prüfen. Dies knallt, wenn man direkt eine nicht deklarierte Variable abfragt. Fragt man sie hingegen als Eigenschaft des window-Objekts ab, klappt's. Genauso gibt's keine Probleme bei Unterobjekten etc.

              Dann ist es eine Eigenschaft eines Objektes und keine nicht vorhanden/ nicht deklarierte Variabel, das ist ein Unterschied.

              Ja und nein. Man kann es hervorragend ausnutzen.

              In JS>=1.1&&JS<1.3 gibt's typeof. Hier kann man mit typeof prüfen, ob die Variable vorhanden ist bzw. ob sie noch keinen Wert zugewiesen bekommen hat. Eine Unterscheidung gibt's hier nicht.

              Nein, nur ob sie deklariert wurde (und typeof funktionierte schon im Netscape 3.x, keine Ahnung welche Version das ist).

              Kein 1.3, sondern irgendetwas abartiges.

              var x;
              alert(typeof x);

              Wie meinen? Auch ohne Dein "var x;" käme undefined raus. Also heißt Dein "Nein" eigentlich "Ja", oder?

              Ab JS 1.3 kann ich mit einem kleinen Trick unterscheiden, ob sie nicht deklariert wurde, oder ob sie deklariert wurde, aber ihr kein Wert zugewiesen wurde:

              var keinwertzugewiesen;

              if (typeof nichtda == 'undefined') {
                  if (window.nichtda === keinwertzugewiesen)

              Nein, hier reicht if(!keinwertzugewiesen)

              Nein. Es wird nichtda gepfrüft, nicht keinwertzugewiesen.

              ! prüft auf gleich: null, 0, "", false und ist falsch wenn ungleich null, ungleich 0, kein leerstring oder true.

              Sollte es. Tut es aber nicht immer. Genauso wie NS 3.x typeof nicht kennen sollte, und es Layer nicht gibt. Willkommen in der Knetgummiwelt von JS :)

              Nun doch ein Gruß: Schönes Wochenende :)

              1. ! prüft auf gleich: null, 0, "", false und ist falsch wenn ungleich null, ungleich 0, kein leerstring oder true.

                Sollte es. Tut es aber nicht immer. Genauso wie NS 3.x typeof nicht kennen sollte, und es Layer nicht gibt. Willkommen in der Knetgummiwelt von JS :)

                Dann sach mir ein Beispiel wo es nicht funktioniert!

                Struppi.

  2. if (variable != 'wert')

    Gruß!

    1. if (variable != 'wert')

      auch das ist falsch.

      Struppi.

      1. stimmt... wo du's sagst seh' ich's auch... war wohl ein wenig voreilig...

        sorry!

        1. stimmt... wo du's sagst seh' ich's auch... war wohl ein wenig voreilig...

          hehe, nicht nur du ;-)

          sorry!

          Ich verzeihe dir ;-)

          Struppi.

          1. naja, ich bin Dachdeckermeister... ich muß sowas ja nicht sofort sehen...

            :-)

  3. moin :)

    if (!variable)

    ich nehme an, es könnte sich bei der Variable um einen bollschen Wert handeln.
    In diesem Fall prüft die if-Abfrage ob diese Variable false ist.
    (Das heisst die Anweisungen oder der Block nach der if-Abfrage wird nur ausgeführt wenn variable==false)

    Den Teil über bedingte Anweisungen findest du unter
    http://selfhtml.teamone.de/javascript/sprache/bedingt.htm
    liebe Gruesse lina

    --
    ss:| ls:] fo:| de:] ch:? rl:? br:> js:( ie:% fl:| mo:)
    Wer nicht versucht hat schon verloren.
    1. moin :)

      if (!variable)
      ich nehme an, es könnte sich bei der Variable um einen bollschen Wert handeln.

      Nicht nur. siehe meine Antwort.

      Struppi.

      1. moin :)

        ich nehme an, es könnte sich bei der Variable um einen bollschen Wert handeln.
        Nicht nur. siehe meine Antwort.

        man beachte den Konjunktiv ;) dieser schließt andere Möglickeiten nicht aus!
        Korrektur meinerseits - es sollte boolscher Wert heissen...

        liebe Gruesse lina

        --
        ss:| ls:] fo:| de:] ch:? rl:? br:> js:( ie:% fl:| mo:)
        Wer nicht versucht hat schon verloren.
  4. Hallo,

    kann mir jemand sagen, was dieser Code bedeutet und wo ich was dazu bei SELFHTML finden kann?:

    if (!variable)

    Das überprüft, ob variable "keinen" Wert hat (und nicht ob sie existiert, im Mozilla wird bei undefinierten Variabeln in dem Falle auch eine Warnung ausgegeben).

    Der ausdruck ist wahr, wenn:

    variable = "";
    variable = 0;
    variable = null;
    variable = false;

    ist.

    Struppi.

    1. Hi Struppi,

      if (!variable)
      Das überprüft, ob variable "keinen" Wert hat (und nicht ob sie existiert, im Mozilla wird bei undefinierten Variabeln in dem Falle auch eine Warnung ausgegeben).

      Zu meinem Verständnis, wäre das hier dann richtig?
      if(!Flasche) alert("Spieler habbe gespielt wie Flasche leer!")

      Viele Grüße
      Torsten

      --
      <img src="http://www.siechfreds-welt.de/selftest/ie_ex.jpg" border="0" alt="">
      1. Hi Struppi,

        if (!variable)
        Das überprüft, ob variable "keinen" Wert hat (und nicht ob sie existiert, im Mozilla wird bei undefinierten Variabeln in dem Falle auch eine Warnung ausgegeben).

        Zu meinem Verständnis, wäre das hier dann richtig?
        if(!Flasche) alert("Spieler habbe gespielt wie Flasche leer!")

        wenn Flasche vorher definert wurd emit einem folgenden Wert:

        var Flasche = 0;
        var Flasche = "";
        var Flasche = false;
        var Flasche = null;

        Struppi.

    2. Hi!

      Das überprüft, ob variable "keinen" Wert hat (und nicht ob sie existiert, im Mozilla wird bei undefinierten Variabeln in dem Falle auch eine Warnung ausgegeben).

      Die Bedingung ergibt auch dann true, wenn variable nicht definiert ist, egal ob Mozilla da eine Warnung gibt oder nicht.

      Der ausdruck ist wahr, wenn:

      variable = "";
      variable = 0;
      variable = null;
      variable = false;

      Aus ECMA-262-3:
      12.5. The if Statement
        [...]
        The production IfStatement : if ( Expression ) Statement is evaluated as follows:
        1. Evaluate Expression.
        2. Call GetValue(Result(1)).
        3. Call ToBoolean(Result(2)).
        4. If Result(3) is false, return (normal, empty, empty).
        5. Evaluate Statement.
        6. Return Result(5).

      9.2 ToBoolean
        The operator ToBoolean converts its argument to a value of type Boolean
        according to the following table:
        Input Type | Result
        -----------+-------------
        Undefined  | false
        Null       | false
        Boolean    | The result equals the input argument (no conversion).
        Number     | The result is false if the argument is +0, 0, or NaN;
                   | otherwise the result is true.
        String     | The result is false if the argument is the empty string (its length is zero);
                   | otherwise the result is true.
        Object     | true

      D.h. Du hast weitgehend recht, Du hast nur noch NaN und undefined vergessen.

      So long

      --
      "Microsoft ist über die Probleme informiert, hat aber noch nicht reagiert."
      "Der Patch %s, der das Problem %s beheben sollte, funktioniert offenbar nicht."
      "Wann ein Update verfügbar sein wird, ist nicht bekannt."
          (Textbausteine der Heise-Newsticker-Redaktion)