Использование break after default в операторе switch, когда default не в конце - PullRequest
0 голосов
/ 11 мая 2019

В учебнике w3schools о выражениях switch говорится:

Если значение по умолчанию не является последним регистром в блоке переключателей, не забудьте завершить случай по умолчанию с перерывом.

Однако, как говорится в этом руководстве:

Когда JavaScript достигает ключевого слова break, он выходит из переключателя блок.

Так что, если у вас есть значение по умолчанию с разрывом в начале оператора switch, почему бы по умолчанию не всегда выполняться и блок немедленно выходил из интерпретатора? Интерпретатор не читает элементы в выражении switch по порядку?

Ответы [ 3 ]

2 голосов
/ 11 мая 2019

Как указано в руководстве

Ключевое слово default указывает код для запуска, если нет case соответствия

Позиция defaultКлючевое слово не имеет значения, случаи после того, как оно будет проверено перед выполнением кода в случае default.Если один из этих случаев совпадает, его код будет выполнен, поэтому break в блоке default не будет выполнен.

Код после default выполняется только в том случае, если нет явногослучаи совпадают, или выбирается случай до default, а break до default (так что он проваливается) не существует.

Случай default: обычно пишется последним по соглашению, поэтому break там обычно не нужно.Предупреждение в учебнике - это просто напоминание о том, что если вы поставите default: ранее, правило, которое вы продолжите в следующем случае, когда break не будет применено;В правиле default нет ничего особенного, что могло бы помешать ему.

1 голос
/ 11 мая 2019

Из этого учебника вы также можете прочитать:

Ключевое слово default указывает код для запуска, если NO CASE match.

Так, например, если определено в начале и есть совпадение case, будет выполнен код, связанный с этим совпадением, а не код, связанный с блоком по умолчанию, например:

function test(n)
{
    let res;

    switch (n)
    {
        default: 
            res = "default";
            break;
        case 1:
            res = "Case 1";
            break; 
        case 0:
            res = "Case 2";
     }

     return res;
}

console.log(test(1), test(0), test(9));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Как видите, блок default выполняется только при отсутствии совпадений (как в test(9)). Теперь по отношению к этому:

Если default не последний случай в блоке switch, не забудьте завершить случай default с break.

Вы можете прочитать следующее предупреждение:

Примечание : Если вы опустите оператор break, будет выполнен случай next , даже если оценка не соответствует случаю.

Так, например, если мы опускаем оператор break в предыдущем примере, мы не собираемся получать ожидаемую строку default для случаев по умолчанию, вместо этого мы собираемся получить строку Case 1:

function test(n)
{
    let res;

    switch (n)
    {
        default: 
            res = "default";
        case 1:
            res = "Case 1";
            break; 
        case 0:
            res = "Case 2";
     }

     return res;
}

console.log(test(1), test(0), test(9), test(99));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
1 голос
/ 11 мая 2019

Это указано в ECMA-262, 13.12.9 Семантика времени выполнения: CaseBlockEvaluation (это определение JavaScript).

К сожалению, эту спецификацию немного сложно прочитать, но онасводится к следующему: чтобы выполнить оператор switch, попробуйте предложения case перед default, если таковые имеются;затем попробуйте предложения case после default, если они есть;и только если ни один из них не совпадает, выполните часть default.Неважно, где находится default.

...