Переключатель JavaScript с логическими операторами?
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;
}
}
Потому что он не работает так, как я ожидаю, а не для печати bye и lol, это заставляет меня думать, что это неверно в JavaScript. Я попытался найти несколько примеров, чтобы увидеть, делают ли люди это в Google, и я не видел ничего. Так это действительно или нет? или Почему это может не сработать?
Ответы
Ответ 1
Когда switch
интерпретируется, выражение в круглых скобках сравнивается со значениями конкретных случаев.
Итак, в вашем случае значение count
будет сравниваться со значениями 2
, count > 3
и count >= 4
. И это не сработает. Хотя вы можете переписать его и сравнить с true
, чтобы заставить его работать:
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
break;
case (count >= 4):
document.write("lol");
break;
}
Но это не значит, что switch
предполагается использовать.
Вместо этого используйте if
:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
} else if (count >= 4) {
document.write("lol");
}
Изменить. Поскольку вы используете только случаи switch
(перерыв, если соответствует случаю), мой перевод switch
-to- if
/else
верен.
Но case/branch count >= 4
никогда не будет применяться, поскольку count > 3
является истинным (также) для count
значений больше или равно 4.
Чтобы устранить эту проблему (напишите "bye" и "lol" для значений больше или равных 4), удалите последний else
, чтобы сделать последний оператор if
независимым от предыдущего:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
}
if (count >= 4) {
document.write("lol");
}
Ответ 2
Вы используете аргумент case неправильно. Вы должны указать значение, которое будет сравниваться со значением в предложении switch... и не булево выражение, подобное этому count>2
В этом случае это булевское выражение будет передано в true или false (1 или 0) и сравнивается с вашим значением, а иногда может работать, иногда - нет.
Вы должны рассмотреть возможность замены его операторами if.
Ответ 3
Это исправление для ответа Gumbo. Я пишу отдельный ответ только потому, что это не подходит как комментарий.
Изменить: Гумбо предложил в комментарии, что я, возможно, неправильно понял намерение Дуга. Если OP действительно хочет распечатать "bye" и "lol" для count >= 4, нам нужно удалить break
из switch
. Случаи теперь возвращаются в первоначальном порядке, так что "bye" и "lol" печатаются в этом порядке (что, по-видимому, является намерением 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;
}
В этом случае я согласен с Gumbo в том, что исправленный оператор if
верен.
Далее следует оригинальный ответ (предполагается, что OP действительно хотел, чтобы либо "LOL", либо "Bye" для печати, но не оба.)
Оператор switch
, который написал Gumbo, не будет работать для count >= 4, по той же причине, что и утверждение Gumbo original if
не будет work: Поскольку случаи оцениваются последовательно, count >= 4 подразумевает, что будет выполнен второй случай (count > 3); поэтому script никогда не достигнет теста для count >= 4. Чтобы исправить это, тесты должны выполняться в обратном порядке, от самого высокого до самого низкого:
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
Скорректированный оператор if
все еще не является правильным, потому что для count >= 4 он выдаст как bye
, так и lol
на выходе. Опять же, тесты на лестнице if
должны быть организованы так, чтобы идти от наивысших до самых низких значений:
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
Это не идеальный пример, потому что если count
является целым числом, то оценка count >= 4
и count > 3
приведет к тем же результатам - true
для count >= 4, false
в противном случае. Это не так, если count
является значением с плавающей запятой (но тогда значение с плавающей запятой с именем "count" вызовет другие проблемы.)
Ответ 4
Вы должны поменять свои последние два случая.
Ответ 5
switch
обычно требуется условие фиксированное условие/значение; потому что ваша переменная count
изменяется каждый раз, она идет вразрез с этим. Вместо этого используйте условие if-else
.