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?
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%@ helmus 'Antwort ist richtig und ist eine gute Lösung.
Sie können jedoch den Fall NaN
beibehalten, wenn Sie Zeichenfolgen verwenden:
Tags und Links javascript