2016-06-27 11 views
3

Eine Funktion machen und kann nicht verstehen, wie würde ich einen Vergleich im Schalter Fall machen, so NaN === Fall geht wahr und Rückkehr "Eingangsnummer ist Number.NaN";JS NaN Vergleich in Schalter Fällen

function whatNumberIsIt(n){ 
     var str; 
     switch (n) { 
     case Number.MAX_VALUE : str = "Input number is Number.MAX_VALUE"; 
     break; 
     case Number.MIN_VALUE : str = "Input number is Number.MIN_VALUE"; 
     break; 
     case Number.NaN : str = "Input number is Number.NaN"; 
     break; 
     case -Infinity : str = "Input number is Number.NEGATIVE_INFINITY"; 
     break; 
     case Infinity : str = "Input number is Number.POSITIVE_INFINITY"; 
     break; 
     default : str = "Input number is " + n; 
     } 
     return str; 
    } 
whatNumberIsIt(NaN) 
+1

Sie können einen Scheck in Ihrem Standardfall ein. Mit 'isNaN()' können Sie eine andere Zeichenfolge anzeigen, wenn es sich um eine 'NaN' handelt. –

+0

@Teemu Danke, habe auch dieses versucht, funktioniert aber immer noch nicht ( @MohitBhardwaj in diesem Fall brauche ich meinen Standardfall für alle anderen Fälle außer max_value, min_value, infinity und nan usw. –

+0

@ Teemu können Sie eine Funktion ausführen und Sie werden sehen, dass in Ihrem Fall (Fall! + n: str = 'Eingabe Nummer ist NaN'; Pause;) es würde nicht gehen und Standard-Fall zurückgeben. –

Antwort

2

Vergleichen isNaN in der switch-Anweisung, überprüfen Sie für falsch. Hier ist der Code:

function whatNumberIsIt(n){ 
     var str; 

     /** 
     * The !isNaN(n) here is really the secret sauce. 
     * This means the value has to be a real number before comparisons will 
     * even happen. That's why we're able to compare "false" in the switch... otherwise 
     * this code wouldn't work. 
     */ 
     switch (!isNaN(n) && n) { 
      case Number.MAX_VALUE : 
       str = "Input number is Number.MAX_VALUE"; 
       break; 

      case Number.MIN_VALUE : 
       str = "Input number is Number.MIN_VALUE"; 
       break; 

      case false : 
       str = "Input number is Number.NaN"; 
       break; 

      case -Infinity : 
       str = "Input number is Number.NEGATIVE_INFINITY"; 
       break; 

      case Infinity : 
       str = "Input number is Number.POSITIVE_INFINITY"; 
       break; 

      default : str = "Input number is " + n; 
     } 

     return str; 
     } 

    console.log(whatNumberIsIt("String")); 
    console.log(whatNumberIsIt(NaN)); 
    console.log(whatNumberIsIt(1)); 
    console.log(whatNumberIsIt(Infinity)); 
    console.log(whatNumberIsIt(-Infinity)); 

Fiddle: https://jsfiddle.net/87o83q2q/

Hier ist die Ausgabe, die Sie erwarten sollten:

Input number is Number.NaN 
Input number is Number.NaN 
Input number is 1 
Input number is Number.POSITIVE_INFINITY 
Input number is Number.NEGATIVE_INFINITY 
+1

Ich glaube wirklich, ich habe versucht false Fall. Es funktioniert! Danke –

+0

Es geht nicht nur um falsch, Sie haben um den Vergleichsoperator zur switch-Anweisung selbst hinzuzufügen. Sehen Sie meine bearbeiteten Notizen über das '! IsNaN (n)' ... deshalb funktioniert das überhaupt. Ohne es wird es weiterhin scheitern. –

+0

habe ich vorher nicht bemerkt, aber jetzt bin ich total verwirrt. Könntest du mir das erklären (! IsNaN (n) && n) und wie würde es mit False Case funktionieren? –