2016-04-18 10 views
2

Ich versuche diesen einfachen Code und scheint, dass die Benutzereingabe nicht alle Vergleiche durchläuft und sofort zum Standard springt. Ich vermute, dass JS die Eingabe des Benutzers stattdessen als String nimmt. Ich habe versucht, parseInt(), aber hat nicht funktioniert. Hier ist mein Code;Switch-Anweisung Benutzereingaben vergleichen Javascript

var number = prompt('What\'s your favority number?'); 

switch(number){ 
    case (number < 10): 
     console.log('Your number is to small.'); 
     break;   
    case (number < 100): 
     console.log('At least you\'re in the double digits.'); 
     break; 
    case (number < 1000): 
     console.log('Looks like you\'re in three digits.'); 
     break; 
    default: 
     console.log('Looks like you\'re in the fouth digits.'); 
} 
+1

http://stackoverflow.com/ Fragen/6665997/Switch-Anweisung für mehr als weniger als –

Antwort

2

Verwenden true als expression für den Schalter.

Die switch-Anweisung wertet einen Ausdruck aus, der Wert des Ausdrucks auf einen Fall Klausel übereinstimmt, und führt mit diesem Fall zugehörigen Aussagen. [Ref]

eine switch-Anweisung auswertet ersten ihren Ausdruck. Es sucht dann nach der ersten case-Klausel, deren Ausdruck den gleichen Wert wie das Ergebnis des Eingabeausdrucks ergibt (mit dem strikten Vergleich ===) und die Steuerung an diese Klausel übergibt und die zugehörigen Anweisungen ausführt. (Wenn mehrere Fälle mit dem angegebenen Wert übereinstimmen, wird der erste übereinstimmende Fall ausgewählt, auch wenn die Fälle nicht gleich sind.). Wenn keine übereinstimmende case-Klausel gefunden wird, sucht das Programm nach der optionalen default-Klausel und übergibt, sofern sie gefunden wird, die Steuerung an diese Klausel und führt die zugehörigen Anweisungen aus.

var number = prompt('What\'s your favority number?'); 
 
number = Number(number); //Use `Number` to cast it as a number 
 
switch (true) { 
 
    //----^^^^ 
 
    case (number < 10): 
 
    console.log('Your number is to small.'); 
 
    break; 
 
    case (number < 100): 
 
    console.log('At least you\'re in the double digits.'); 
 
    break; 
 
    case (number < 1000): 
 
    console.log('Looks like you\'re in three digits.'); 
 
    break; 
 
    default: 
 
    console.log('Looks like you\'re in the fouth digits.'); 
 
}
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

+0

Ich werde nichts dagegen Downvotes. Aber darauf achten, einen guten Grund zu geben! – Rayon

+1

das ist eine perfekte Antwort! ++ !, kann hinzugefügt werden, dass der Vergleich ['==='] ist (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity) –

+1

@ NinaScholz. Aktualisiert! Vielen Dank ;) – Rayon

1

Sie verstehen nicht, wie die Anweisung funktioniert Schalter. Es ist keine Abkürzung für das Überprüfen dynamischer Werte. Es ist eine Abkürzung für das Überprüfen bekannter Werte.

Jeder Fall ist eine Anweisung, die auf einen Wert ausgewertet wird. Wenn Sie look at the docs, Sie werden sehen, dass sie case: value haben, anstatt was Sie versuchen, die case: (expression) ist. Also, es wird alle deine Ausdrücke in Werte umwandeln.

So zum Beispiel Ihr erster Fall:

case (number < 10): 

Aber was das wirklich wird, ist:

case false: 

Und natürlich wird keine Nummer false bewerten (technisch 0 ist ein falscher Wert, aber der Schalter verwendet === Vergleich statt == so 0 === false // false). So sind alle Ihre Fälle wirklich case false, und so fällt der Schalter durch alle von ihnen und landet auf dem default Fall.

Also, für Ihre Situation ist die switch-Anweisung unangemessen. Sie sollten if-Anweisungen verwenden.

if(number < 10) { 

} else if(number < 100) { 

} else if(number < 1000) { 

} else { 

} 

Die Aussage Schalter ist nur dann sinnvoll, wenn Sie die Werte kennen: (. Und ja, verwenden Sie parseInt ganze Zahlen haben, um sicherzustellen)

switch(number) { 
    case 10: 
    break; 
    case 100: 
    break; 
    case 1000: 
    break; 
    default: 
}