Forum: PC-Programmierung [JavaScript] Switch Case mit String


von Rene (Gast)


Lesenswert?

Hallo,


ich habe ein Problem mit Javascript switch case.

Dabei habe ich eine Variable die ich zum String konvertiere und dann in 
einer switch case Anweisung vergleichen möchte. Das funktioniert aber 
nicht da offensichtlich die Datentypen nicht identisch sind ( switch 
case macht ja === Vergleich).

Gibt es dort eine Lösung außer if else zu benutzen?


Beispielcode: Hier wird nicht case "5" angesprungen.
1
var i = 5;
2
var j;
3
4
5
j = i.toString();
6
7
switch (j){
8
9
case "5": \blah break;
10
default: \blah
11
12
13
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Welchen tieferen Sinn soll das ganze haben?

von Finn S. (scooter757)


Lesenswert?

Schnell mal gegoogelt ergibt: 
https://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html

Müsste ja eigentlich funktionieren.

Finn

von Planlos (Gast)


Lesenswert?

Finn S. schrieb:
> Schnell mal gegoogelt ergibt:

Das ist Java.

Rene schrieb:
> ich habe ein Problem mit Javascript


Außer 4 Buchstaben haben beide Sprachen nicht viel gemeinsam.

wie wäre sowas
1
var cases={
2
3
"5":function blub() {},
4
"7":function blah() {}
5
...
6
};
7
8
var i=5;
9
if (cases[i]) cases[i]();
10
else default()...

von Finn S. (scooter757)


Lesenswert?

Oh sorry, zu schnell gelesen :D

Finn

von Rene (Gast)


Lesenswert?

Ich hatte gehofft das es eine Datentypkonvertierung gibt, die es 
ermöglicht das der Datentyp von j mit dem von "5" übereinstimmt.
Ist sowas denkbar?


@Planlos danke für den Code Snippet das werde ich mal durchdenken und 
testen

von Sebastian B. (smoere)


Lesenswert?

Javascript kann nach Strings switchen, dein Beispielcode läuft (wenn man 
für das \blah was Sinnvolles einsetzt) korrekt.
https://jsfiddle.net/e4p81yyq/

<edit> Ich schließe mich aber der Frage von rufus nach dem "Warum" an, 
solche Konstruktionen lassen sich meistens effizienter lösen. </edit>

: Bearbeitet durch User
von Rene (Gast)


Lesenswert?

Hallo,


danke für die azhlreichen Antworten.
Ich habe mitlerweile den fehler gefunden er war in meinem vereinfachten 
Bsp. nicht enthalten. Ich hatte als Eingang für das switch eine String 
object und keine primitive und daher musste ich über

j = new String(i).valueOf();

erst ein Wandel durchführen.

VG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.