ich mich sah nur eine Lösung ursprünglich geschrieben, aber während meines Schlafes kam ich mit einer hervorragenden Lösung auf.
Denken Sie immer daran, dass ein Switch keine implizite Typkonvertierung durchführt, um die Fälle zu vergleichen. Wenn Sie der switch-Anweisung also eine Zeichenfolge angeben, wird sie nicht mit Ganzzahlen in den Fällen übereinstimmen und umgekehrt. Wenn Sie mit Strings und Integern vergleichen möchten, müssen Sie zuerst Ihre ganze Zahl in eine Zeichenkette umwandeln und dann nur mit Strings vergleichen.
Die hervorragende Lösung:
Wie WouterH wies darauf hin, wird meine erste Lösung auf Standard lösen, wenn eine Zeichenfolge verwenden, die eine Zahl enthält, wird dieses Verhalten für switch-Anweisungen erwartet. Aber es könnte nützlich sein, das Argument zu analysieren, um dies zu überwinden. Dafür können Sie folgenden Code verwenden:
var x = "1";
switch (isNaN(x) || parseInt(x))
{
case true:
alert("IsNaN!")
break;
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
default:
alert("default");
break;
}
Meine ersten hervorragende Methode:
var x = "clearly not a number";
switch(x){
case !isNaN(x) || x:
alert("IsNaN!")
break;
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
default:
alert("default");
break;
}
isNaN gibt true zurück, wenn x, wo eine Zeichenkette sein, aber es ist nicht wirklich wichtig, weil wahr gewonnen Wird aufgrund des oben erwähnten Verhaltens der switch-Anweisung nicht als wahr interpretiert.
Meine ursprüngliche Lösung:
Ich weiß nicht einmal, was ich dachte, das sieht schrecklich und die Vertiefung ist einfach nur peinlich, aber danke für das upvotes!
var x = "clearly not a number";
switch(x){
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
case default:
if (isNaN(x)){
alert("isNaN");
break;
}
alert("default");
break;
}
Brad Lösung:
thx an Brad für diese ein. Ich mag das nicht wirklich, weil es sich ein bisschen wie ein Hack anfühlt, das heißt, das ist nicht die Art, wie Sie eine Case-Anweisung verwenden würden, aber es gibt Ihnen die größte Flexibilität, also bin ich mir sicher Es gibt einen Anwendungsfall dafür.
var x = "clearly not a number";
switch(true)
{
case x==1:
alert("1");
break;
case x==2:
alert("2");
break;
case IsNaN(x):
alert("IsNaN");
break;
case default:
alert("default");
break;
}
Ich glaube, der einzige Weg, t zu tun Das ist 'switch (true)' mit 'case x === 1' und' case isNaN (x) 'Anweisungen. Nicht die ideale Struktur, aber funktioniert. – Brad
Sie könnten einfach im Normalfall isNan machen und Ihre Logik dementsprechend ändern. – nolegs
Setzen Sie 'case' Blöcke für jeden anderen möglichen Wert von' x' und dann 'default' wird' NaN'. :) – tenfour