#javascript
#javascript
Вопрос:
В JavaScript есть ли способ перейти к блоку else из блока if?
Вот пример:
if (is_valid) {
some code;
if (!something_else_is_valid) {
// Skip to else to handle error;
}
} else {
handle_error_here;
}
Я знаю, что мог бы просто переместить функциональность handle_error в другую функцию, но я не хочу этого делать.
Спасибо за ваши ответы / комментарии!
Ответ №1:
Никогда не говори никогда: Да — и они возненавидят тебя за это, но эй:
var else_ = false
var if_ = true
IF:
{
if(if_){
console.log("entered IF BLOCK")
var second = false
if(!second){
console.log("exits to ELSE BLOCK")
else_ = true
break IF;
console.log("this will not be executed - its skipped")
}
}
}
ELSE: {
if(!else_) break ELSE;
console.log("entered ELSE BLOCK")
}
соответствующим образом пометьте свои блоки, и вы сможете выйти из блока if в блок else 😉
Ответ №2:
В JavaScript есть ли способ перейти к блоку else из блока if?
Нет, потому что условие уже достигнуто, поэтому невозможно вернуться назад и ввести else
условие.
Вы можете использовать инструкцию switch
. break
Ключевое слово останавливает последующее выполнение. Если something_else_is_valid
равно false, то break
не произойдет, поэтому switch
блок достигнет default
случая, который является «случаем ошибки».
function A(is_valid, something_else_is_valid) {
switch(is_valid) {
case true:
// some code
if (something_else_is_valid) {
// do somthing
break;
} // else, will reach default case.
default:
throw new Error("Wrong!");
// handle_error_here
}
}
A(true, false);
Ответ №3:
Нет, после того, как if
введено, нет возможности выполнить обратный переход, хотя вы могли бы рекурсивно вызвать содержащую функцию с помощью is_valid
of false
:
function doTest(is_valid) {
if (is_valid) {
// some code;
if (!something_else_is_valid) {
return doTest(false);
}
} else {
// handle_error_here;
}
}
Вы также могли бы использовать try/catch
(хотя, в идеале, исключения являются исключительными, а не конструкцией потока управления):
try {
if (!is_valid) {
throw new Error();
}
// some code;
if (!something_else_is_valid) {
throw new Error();
}
} catch(e) {
// handle_error_here;
}
Еще лучше, чем оба, было бы обрабатывать ошибки в одной функции, которую вы можете вызвать, но вы сказали, что не хотите этого делать.
Ответ №4:
Нет, вы не можете — вы должны комбинировать условия:
if (is_valid amp;amp; something_else_is_valid) {
//Some code
} else {
handle_error_here();
}
Комментарии:
1. Я не хочу этого делать, потому что мне нужен некоторый код для запуска в блоке if перед тем, как я выполню оценку
something_else_is_valid
.2. Затем вы должны вложить
else
.