for (var count = 1; count < 6; count++) { switch (count) { case (2): document.write("hi"); break; case (count > 3): document.write("bye"); break; case (count >= 4): document.write("lol"); break; } }
Parce que ça ne fonctionne pas de la façon dont je m'attends, sans imprimer bye et lol, cela me fait penser que cela n'est pas valable dans JavaScript. J'ai essayé de chercher des exemples pour voir si les gens le font sur Google et je n'en ai vu aucun. Est-ce que cela est valable ou non? Ou pourquoi cela ne fonctionnerait pas?
Lorsque le switch
est interprété, l'expression entre parenthèses est comparée aux valeurs des cas particuliers.
Donc, dans votre cas, la valeur du count
serait comparée aux valeurs de 2
, count > 3
et count >= 4
. Et cela ne fonctionnera pas. Même si vous pouvez le réécrire et le comparer à true
pour le faire fonctionner:
switch (true) { case (count == 2): document.write("hi"); break; case (count > 3): document.write("bye"); break; case (count >= 4): document.write("lol"); break; }
Mais ce n'est pas la façon dont le switch
est censé être utilisé.
Utilisez les instructions if
à la place:
if (count == 2) { document.write("hi"); } else if (count > 3) { document.write("bye"); } else if (count >= 4) { document.write("lol"); }
Edition Étant donné que vous utilisez exclusivement les cas de switch
(pause si un cas correspond), ma traduction de switch
-à- if
/ else
est correcte.
Mais le count >= 4
cas / branche ne sera jamais appliqué puisque count > 3
est vrai (aussi) pour les valeurs de count
supérieures ou égales 4.
Pour corriger ce problème (écrire "bye" et "lol" pour des valeurs supérieures ou égales 4), supprimez le dernier else
pour que la dernière instruction if
indépendante de la précédente:
if (count == 2) { document.write("hi"); } else if (count > 3) { document.write("bye"); } if (count >= 4) { document.write("lol"); }
Vous utilisez la clause de cas de manière incorrecte. Vous devez fournir une valeur qui sera comparée à la valeur de la clause de commutation … et non une expression booléenne comme celle-ci count>2
Dans ce cas, cette expression booléenne sera transmise à true ou false (1 ou 0) et comparée à votre nombre de valeurs et peut parfois fonctionner, parfois – pas.
Vous devriez envisager de le remplacer par des déclarations if.
C'est une correction à la réponse de Gumbo . J'écris une réponse distincte uniquement parce que cela ne correspond pas à un commentaire.
Edit: Gumbo a suggéré dans un commentaire que j'ai peut-être mal compris l'intention de Doug. Si l'OP veut vraiment que "bye" et "lol" soient imprimés pour compter> = 4, alors nous devons supprimer une break
du switch
. Les cas sont maintenant de retour dans l'ordre d'origine, de sorte que "bye" et "lol" sont imprimés dans cet ordre (ce qui est apparemment l'intention du OP).
switch (true) { case (count == 2): document.write("hi"); break; case (count > 3): document.write("bye"); // No break here; just fall through. case (count >= 4): document.write("lol"); break; }
Dans ce cas, je suis d'accord avec Gumbo que l'énoncé if
révisé est correct.
La réponse d'origine suit (suppose que l'OP voulait vraiment "lol" ou "bye" imprimer, mais pas les deux.)
L'énoncé de switch
que Gumbo a écrit ne fonctionnera pas pour le compte> = 4, pour la même raison que l'affirmation originale d'origine de Gumbo ne fonctionnera pas: car les cas sont évalués en séquence, compter> = 4 implique que le second cas (compter > 3) sera exécuté; De sorte que le script n'atteindra jamais le test pour count> = 4. Pour résoudre ce problème, les tests doivent être exécutés dans l'ordre inverse, du plus haut au plus bas:
switch (true) { case (count >= 4): document.write("lol"); break; case (count > 3): document.write("bye"); break; case (count == 2): document.write("hi"); break; }
L'énoncé if
corrigé n'est pas correct non plus, car pour count> = 4, il produira à la fois bye
et lol
sur la sortie. Encore une fois, les tests dans l'échelle if
devraient être organisés pour passer des valeurs les plus élevées à la plus basse:
if (count >= 4) { document.write("lol"); } else if (count > 3) { document.write("bye"); } else if (count == 2) { document.write("hi"); }
Ce n'est pas un exemple idéal, car si le count
est un nombre entier, alors l'évaluation count >= 4
et le count > 3
produira les mêmes résultats – true
pour le compte> = 4, false
sinon. Ce ne serait pas le cas si le count
est une valeur à virgule flottante (mais alors, une valeur à virgule flottante appelée «compte» soulèverait d'autres préoccupations).
Vous devriez échanger vos deux derniers cas.
Le switch
normalement besoin d'une condition / valeur fixe ; Parce que votre variable de count
change à chaque fois, cela va à l'encontre de cela. Utilisez à la place if-else
condition.