Wie hast du einen NaN-Fall in einer switch-Anweisung?

8

Da NaN === NaN zu false ausgewertet wird, ist es möglich, eine NaN case zu einer switch Anweisung hinzuzufügen?

Nehmen wir zum Beispiel an, ich möchte den folgenden Schalter machen:

%Vor%

Wenn Sie NaN als x senden, wird der Standardfall angezeigt. Ich weiß, dass es Möglichkeiten gibt, NaN in switch-Anweisungen zu verwenden (z. B. kann ich mit einer if..else -Anweisung umgeben und isNaN verwenden), aber gibt es einen direkteren Ansatz?

    
Michael Holman 25.07.2012, 20:54
quelle

3 Antworten

6

Ich schrieb ursprünglich, ich sah nur eine Lösung, aber während meines Schlafes kam ich mit einer hervorragenden Lösung.

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 Zeichenfolgen und Ganzzahlen vergleichen möchten, müssen Sie zuerst Ihre ganze Zahl in eine Zeichenfolge umwandeln und dann nur mit Zeichenfolgen vergleichen.

Die hervorragende Lösung:

Wie von WouterH hervorgehoben, wird meine ursprüngliche Lösung bei der Verwendung einer Zeichenfolge, die eine Zahl enthält, auf den Standardwert zurückgesetzt. Dies ist das erwartete Verhalten für Switch-Anweisungen. Aber es könnte nützlich sein, das Argument zu analysieren, um dies zu überwinden. Dafür können Sie folgenden Code verwenden:

%Vor%

Meine anfängliche hervorragende Methode :

%Vor%

isNaN gibt true zurück, wenn x ein String sein soll, aber das spielt keine Rolle, weil true wegen des oben erwähnten Verhaltens der switch-Anweisung nicht als wahr zu einem String ausgewertet wird.

Meine ursprüngliche Lösung:

Ich weiß nicht einmal, was ich dachte, das sieht schrecklich aus und die Einrückung ist einfach peinlich, aber danke für die Upvotes!

%Vor%

Brads Lösung:

thx Brad für diesen. Ich mag das nicht wirklich, weil es sich ein bisschen wie ein Hack anfühlt, das heißt, das ist nicht so, wie Sie es erwarten würden, eine Case-Anweisung zu verwenden, aber es gibt Ihnen die größte Flexibilität, also bin ich mir sicher ist ein Anwendungsfall dafür.

%Vor%     
Willem D'Haeseleer 25.07.2012, 20:58
quelle
2

@ helmus 'Antwort ist richtig und ist eine gute Lösung.

Sie können jedoch den Fall NaN beibehalten, wenn Sie Zeichenfolgen verwenden:

%Vor%     
Danilo Valente 25.07.2012 21:01
quelle
2

Warum nicht einfach ( jsFiddle ):

%Vor%

Oder wenn Sie auch eine Zeichenfolge mit einer Nummer validieren möchten ( jsFiddle ):

%Vor%     
Wouter Huysentruit 09.08.2012 20:33
quelle

Tags und Links