Daniela Koller: Netscape + Switch + Case mit Variable = Crash?

Hallo

Meine Frage, ist es bei einem Case nicht möglich einen dynamischen Wert anzugeben? Habe das ganze mit ein wenig mehr Inhalt mit IE probiert, dort klappt es tadellos. Einzige alternative sind verschachtelte if's, was jedoch nicht so schön und auch nicht so effizient ist.

<html>
   <head>
      <SCRIPT LANGUAGE="JavaScript1.2">
         <!--
         function test() {
            var dummy;
            var test;

switch (dummy) {
               case test:
                  break;
               default:
                  break;
            }
         }
         // -->
      </SCRIPT>
   </head>
</html>

Danke für eine Erklärung wieso dies nicht funktioniert.

Daniela

  1. Moin,

    Hallo

    Meine Frage, ist es bei einem Case nicht möglich einen dynamischen Wert anzugeben? Habe das ganze mit ein wenig mehr Inhalt mit IE probiert, dort klappt es tadellos. Einzige alternative sind verschachtelte if's, was jedoch nicht so schön und auch nicht so effizient ist.

    <html>
       <head>
          <SCRIPT LANGUAGE="JavaScript1.2">
             <!--
             function test() {
                var dummy;
                var test;

    switch (dummy) {
                   case test:

    das produziert bei mir auch einen Fehler. Meine Vermutung ist,
    daß der Variablentyp von test (ob String oder Integer oder sonstwas)
    an dieser Stelle noch zu unspezifiziert ist und die switch/case Anweisung
    damit nicht umgehen kann.
    Die Fehlermeldung kann man z.B. mit

    case ""+test: ...

    anscheinend abschalten. Probier mal, ob dieses Konstrukt
    auch so funktioniert, wie Du es benötigst.
    Achja - falls Du stattdessen Zahlen vergleichen willst:

    case 0+test:

    geht auch ohne Fehlermeldung...

    Viele Grüße

    Andreas

    1. Moin nochmal,

      case 0+test:

      ist aus bekannten Gründen nicht ganz korrekt, da hier
      u.U. auch wieder ein String herauskommen kann.
      Um Strings auszuschließen, müßte aber

      case test-0:  ...

      funktionieren, da '-' kein Stringoperator ist...

      Viele Grüße

      Andreas

      1. case test-0:  ...

        Habs ausprobiert sowohl mit
        case 0+test:      als auch mit
        case test-0:       beides produziert nach wie vor den Absturz,

        Was ich im ersten Post vergessen habe, das Konstrukt verursacht, wenn es nicht in die Function verpackt
        ist einen Syntax-Fehler und keinen Absturz.
        Der Syntax-Fehler ist mit dieser Änderung weg, der Absturz leider nicht.

        Trotzdem vielen Dank für deine Hilfe

        Gruss Daniela