#javascript #switch-statement
#javascript #switch-statement
Вопрос:
Вероятно, действительно глупая проблема, но: это выводит ‘yeeeeeees’ в консоль, но в инструкции switch выдается ошибка неизвестного шага.
Что я делаю не так?
if (step === 'menuLoaded') console.log('yeeeeeeeees');
switch (step) {
case 'menuLoaded':
this.window.activate_side_menu();
this.handleDomainFtp();
break;
case 'ftpStep1':
this.handleDomainFtp(1);
break;
case 'ftpStep2':
this.handleDomainFtp(2);
break;
case 'startMysql':
alert('starting mysql');
this.handleDomainMysqlList();
break;
case 'mysqlList':
this.handleDomainMysql();
break;
case 'mysqlPage':
this.handleDomainMysql(true);
break;
case 'done':
run();
break;
default:
throw new Error('Unknown step: ' step);
break;
}
Комментарии:
1. Хммм … это может быть проблема с «вводом»; что произойдет, если вы это сделаете
if (step == 'menuLoaded') console.log('yeeeeeeeees');
? Я не уверен, какое сравнение произвел бы переключатель, но я думаю, что это было бы===
но, возможно, нет.2.
this.window
предполагается, что это простоwindow
?3. @Levi Morrison, если
===
выдает журнал консоли, то это не проблема с набором текста.4. Похоже, это правильно. Вы уверены, что этот шаг равен тому, что вы думаете, что он равен? Каково его значение при отладке? jsfiddle.net/YP2gy/1
5. Когда я запускаю ваш код, он отлично работает при назначении
'menuLoaded'
дляstep
.
Ответ №1:
Ошибка, которую я получаю, заключается в TypeError: Object [object DOMWindow] has no method 'activate_side_menu'
— вы убедились, что объявили эту функцию где-нибудь в доступной области?
Комментарии:
1. Да, хороший момент! 🙂 Хотя я думаю, что если в одной из функций внутри будет выдана ошибка
case 'menuLoaded'
, инструкция switch автоматически завершит текущий регистр и выполнит инструкцию по умолчанию. Таким образом, в принципе, ваш оператор switch может работать точно так, как ожидалось, ноthis.window.activate_side_menu()
илиthis.handleDomainFtp()
может произойти сбой.2. Сказав это, я на самом деле не вижу в документах ECMAScript ничего, что указывало бы на то, что ошибка в предложении case должна привести к завершению текущего блока выполнения и переходу к предложению default.
Ответ №2:
Поскольку, по-видимому, нет другого способа закрыть мой вопрос, я просто отвечу на него сам.
Проблема заключалась в следующем коде. Позже у меня появляется другая инструкция switch с точно такой же ошибкой ().
Как я уже сказал, вероятно, что-то глупое….
Но спасибо всем за потраченное время!
Ответ №3:
Скорее всего, нужно было присвоить ‘this’ ‘var self’ и использовать ‘self’ вместо this .
Ответ №4:
попробуйте использовать инструкцию по умолчанию без «break;»
default:
throw new Error('Unknown step: ' step);
}
Ответ №5:
Я скорее уверен, что JavaScript switch()
не будет принимать строки — вы должны использовать целочисленные значения. Если вы хотите использовать имена, используйте некоторые переменные, подобные перечислению:
const step_menuLoaded = 0;
const step_menuFtp1 = 1;
const step_menuFtp2 = 2;
const step_startSql = 3;
...
Вы проверили свой код / исходный код на наличие непечатаемых символов внутри строк?
Комментарии:
1. Вместо того, чтобы быть «довольно уверенным», возможно, было бы лучше просто быть «уверенным». Javascript switch отлично работает со строками.
2. Ха-ха, я собирался сам создать jsfiddle. Я слишком устал, я думаю. 1 @OriginalSyn