2016-04-18 6 views
2

私はこの単純なコードを試していますが、ユーザーの入力がすべての比較を行っておらず、すぐにデフォルトのものにジャンプしないようです。私はJSがユーザーの入力を代わりに文字列として取っていると推測しています。私はparseInt()を試みましたが、うまくいきませんでした。ここに私のコードです。switchステートメントを比較するユーザー入力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/質問/ 6665997/switch-statement-for-than-less-than –

答えて

2

スイッチのexpressionとしてtrueを使用してください。

switch文は、ケース節に式の値と一致する、式を評価し、その場合に関連付けられた文を実行する。[Ref]

switchステートメントが最初にその発現を評価します。次に、式が(厳密な比較を使用して、===を使用して)入力式の結果と同じ値に評価される最初のcase節を探し、その句に制御を移して、関連する文を実行します。 (複数のケースが指定された値と一致する場合、ケースが互いに等しくなくても、一致する最初のケースが選択されます)。一致するcase節が見つからない場合、プログラムは省略可能なdefault節を探し、見つかればその節に制御を移し、関連する文を実行します。

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

私はdownvotesを気にしません。しかし、正当な理由を与えるために注意してください! – Rayon

+1

これは完璧な答えです! ++ !, mabeを追加すると、比較は['==='](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity) –

+1

@ NinaScholz。更新しました!ありがとう;) – Rayon

1

あなたはswitch文がどのように機能するかを理解していません。動的な値をチェックするためのショートカットではありません。既知の値をチェックするためのショートカットです。

各ケースは、評価された値になるステートメントです。 look at the docsの場合は、試しているものではなくcase: valueが表示されます(case: (expression))。つまり、すべての式を値に変換します。

だから、例えば、あなたの最初のケースは次のとおりです。

case (number < 10): 

しかし、どのようなことが本当になったことは次のとおりです。

case false: 

そしてもちろん、何の数はfalseに評価されません(技術的に0はAです偽の値ですが、スイッチでは==ではなく===となりますので、0 === false // false)。したがって、すべてのケースは実際にはcase falseなので、スイッチはすべてを通過し、defaultケースに着陸します。

したがって、状況によっては、switch文が不適切です。 if文を使うべきです。

if(number < 10) { 

} else if(number < 100) { 

} else if(number < 1000) { 

} else { 

} 

switch文を使用すると、値がわかっている場合にのみ適しています(。そして、そう、あなたは整数を持っていることを確認するためにparseIntを使用)

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

関連する問題