Оператор Switch наиболее тесно связан с оператором IF, а также является оператором управления процессом, обычно используемым в других языках программирования. Тем не менее, совпадения коммутатора являются конгруэнтными шаблонами. Если вы не обращаете внимания на эту деталь, вы часто будете делать ошибки при написании программ.
Код:
var n = '5'; switch (n) {case 5: alert ('execute case front'); break; default: alert ('execute defut frank');}результат:
Многие люди могут ошибочно подумать, что вышеупомянутая программа пойдет в филиал дела, но в конце концов она пойдет в филиал по умолчанию. Разве они не равны? Давайте использовать оператор IF, чтобы увидеть.
Код:
var n = '5'; if (n == 5) {alert ('true branch');} else {alert ('false franch');}результат:
Это может быть сопоставлено в операторе IF, но почему его нельзя соответствовать в операторе Switch?
Это связано с тем, что в случае с оператором переключения используется режим конвергенции, который эквивалентен использованию трех равных знаков в if. Давайте переписаем код дела
Код:
var n = '5'; switch (n) {case '5': // Перепишите исходный случай 5 в случай '5'Alert (' execute case front '); break; default: alert (' execute front default ');};};};};};};};};};};};};};};};};};результат:
После переписывания, вы можете перейти в ветвь корпуса, точно так же, как мы используем три равных знака, если
Код:
var n = '5'; if (n === 5) {alert ('true branch');} else {alert ('false franch');}результат:
Поскольку используется конвергенция, строка 5 не равняется номеру 5, а ложная ветвь исчезла.
Приведенный выше пример показывает, что проблема, на которую необходимо обратить внимание при использовании конгруэнтного схема сопоставления в коммутаторе, особенно когда числа соответствуют строкам.