#javascript #node.js
#javascript #node.js
Вопрос:
(Это вопрос и ответ «поделитесь своими знаниями»).
Я создал этот оператор switch, чтобы решить, какое восстановление предложить.
const numPomodoros = 3;
switch (0) {
case numPomodoros % 3:
console.log('I propose coffee, V8, and 5m of yoga.');
case numPomodoros % 4:
console.log('I propose a 20m nap.');
}
Я ожидал, что будет выполняться только первый случай (3 % 3 === 0, должен выполняться; 4 % 3 === 1, не должен выполняться); однако второй случай выполняется всегда:
$ node index.js s
I propose coffee, V8, and 5m of yoga.
I propose a 20m nap.
Как?
Ответ №1:
Вам нужно добавить инструкцию break . Это остановит выполнение внутри блока. Отсутствие перерыва означает, что код продолжает выполняться. Может быть, вам нужно значение по умолчанию. Если вы хотите, чтобы действие по умолчанию «Как неизвестное значение»
const numPomodoros = 3; // It checks the # of pomodoros in the db, but I'm setting it to 3 to illustrate the problem.
switch (0) {
case numPomodoros % 3:
console.log('I propose coffee, V8, and 5m of yoga.');
break;
case numPomodoros % 4:
console.log('I propose a 20m nap.');
break;
}
Ответ №2:
Node.js пропускает код в операторе switch до тех пор, пока он не будет соответствовать одному случаю. Когда он соответствует случаю, он прекращает проверку на соответствие случаям и падает вниз, выполняя код, пока не увидит a break
или a }
.
Для этой ситуации используйте if-then .
const numPomodoros = 3; // Or what the db count shows.
if (numRecoveries % 3 === 0)
console.log('I propose coffee, V8, and 5m of yoga.');
if (numRecoveries % 4 === 0)
console.log('I propose a 20m nap.');
Выводит:
$ node index.js s
I propose coffee, V8, and 5m of yoga.
Комментарии:
1. да, if лучше в этой ситуации
Ответ №3:
Если вы не поставите разрыв в конце блока case, все следующие блоки case также будут выполнены.
Также вы должны указать случай по умолчанию в конце, чтобы обрабатывать случаи, которые не совпадают ни с одним из предыдущих блоков.
Это рабочая версия:
const numPomodoros = 3; // It checks the # of pomodoros in the db, but I'm setting it to 3 to illustrate the problem.
switch (0) {
case numPomodoros % 3:
console.log('I propose coffee, V8, and 5m of yoga.');
break;
case numPomodoros % 4:
console.log('I propose a 20m nap.');
break;
default:
console.log("Default case.");
break;
}