Paul: if (a == b || c)

Moin,
Konstrukte wie

if (gebaeudetyp == "haus" || "garage") { ... }

sollten doch laufen, oder? Möchte meinen Quelltext etwas verkürzen, bin mir aber nicht ganz sicher ob dies alle Browser mitmachen.

Paul

  1. Hi,

    Konstrukte wie
    if (gebaeudetyp == "haus" || "garage") { ... }
    sollten doch laufen, oder?

    Natürlich. Das ist syntaktisch korrekt.

    Aber - und darauf willst Du vermutlich hinaus - es ist etwas völlig anderes als

    if ((gebaeudetyp == "haus") || (gebaeudetyp == "garage")) { ... }

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind unverschämt, werden ignoriert. Das Forum existiert.
  2. Hallo, Paul!

    Die Abfrage "if (a == b || c)" wird vom JavaScript wie folgt gelesen: Wenn a gleich b oder wenn c nach einer Typkonvertierung in bool true ergibt - Du möchtest aber "if (a == b || a == c)", nur in gekürzter Form.

    Bei zwei Alternativen würde ich die klassische Schreibweise verwenden, wenn es mehr werden, kannst Du Konstrukte wie "if (({b:1, c:1})[a])" verwenden (man könnte statt 1 auch true nehmen, aber 1 ist kürzer). Aktuelle Browser unterstützen auch das etwas lesbarere "if (a in {b:1, c:1})".

    Gruß, LX

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine wunderbar. (...)
    1. Vielen Dank!

      Paul

  3. @@Paul:

    nuqneH

    if (gebaeudetyp == "haus" || "garage") { ... }
    sollten doch laufen, oder?

    Ja. Die Abfrage ist aber sinnlos, da sie immer true ergibt (sofern gebaeudetyp definiert ist).

    Klar, wenn gebaeudetyp == "haus" ist. Andernfalls wird die zweite Bedingung ausgewertet: "garage" in booleschen Wert konvertiert ergibt true.

    Das ist aber sicher nicht das von dir Gewünschte.

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)
  4. Hallo Paul,

    Konstrukte wie

    if (gebaeudetyp == "haus" || "garage") { ... }

    aber nicht so, wie du erwartest. Du prüfst, ob gebaeudetyp gleich "haus" ist oder ob "garage" den Wert true liefert. Was du suchst, ist

    if (gebaeudetyp == "haus" || gebaeudetyp == "garage") { ... }

    oder evtl. auch switch/case

    switch(gebaeudetyp) {  
      case "haus":  
      case "garage":  
        tu_was_mit_den_beiden();  
        break;  
      case "scheune":  
      case "stall":  
        tu_was_anderes_mit_den_beiden();  
        break;  
    }
    

    siehe auch http://de.selfhtml.org/javascript/sprache/bedingt.htm

    Gruß, Jürgen