оператор else работает неправильно

1
var question=prompt("What is your age?");

if (question == 14) {
    alert("Coupon 1")
}
if (question == 21) {
    alert("Coupon 2")
}
if (question == 30) {
    alert("Coupon 3")
}
if (question == 50){
    alert ("Coupon 4")
}
else {
    alert("No Coupon")
}

Если я введу возраст 14, он отобразит "Купон 1", а затем отобразит "Нет купона". Он делает это для каждого заявления if, кроме последнего, в возрасте 50 лет. Если я вхожу в возраст 50, я получаю только купон 4 и "Нет купона". Я не понимаю, почему он это делает.

  • 0
    Используйте else if после первого, if
  • 0
    Отличный первый вопрос! Отлично сработано
Теги:
if-statement

2 ответа

1

Ваши операторы if не связаны, каждый из них происходит независимо от других, что означает, что все случаи проверяются, даже если предыдущий возвращает true. Ваш код выглядит примерно так:

var question = prompt("What is your age?");
    //check if 14
    if (question == 14) {
        alert("Coupon 1")
    }
    //check if 21
    if (question == 21) {
        alert("Coupon 2")
    }
    //check if 30
    if (question == 30) {
        alert("Coupon 3")
    }
    //check if 50, else no coupon
    if (question == 50){
        alert ("Coupon 4")
    }
    else {
        alert("No Coupon")
    }

Попробуйте изменить его, чтобы использовать строку if elseif, что означает, что логика является одним непрерывным потоком:

var question = prompt("What is your age?");
        //check if 14
        if (question == 14) {
            alert("Coupon 1")
        }
        //check if 21
        else if (question == 21) {
            alert("Coupon 2")
        }
        //check if 30
        else if (question == 30) {
            alert("Coupon 3")
        }
        //check if 50
        else if (question == 50){
            alert ("Coupon 4")
        }
        //if none of the above, no coupon
        else {
            alert("No Coupon");
        }

Javascript - и многие другие языки - имеет встроенный синтаксис, который специально обрабатывает эту цепочку if-elseif-else, называемую выводом Switch. Вы можете переписать свой код с помощью такого переключателя:

switch (prompt("What is your age?")) {
    case 14:
        alert("Coupon 1");
        break;
    case 21:
        alert("Coupon 2");
        break;
    case 30:
        alert("Coupon 3");
        break;
    case 50:
        alert("Coupon 4");
        break;
    default:
        alert("No Coupon");
        break;
}
  • 0
    Случай по default не требует break
  • 0
    ничего не повредит и имеет некоторые преимущества, проверьте обсуждение здесь: softwareengineering.stackexchange.com/questions/201777/…
0

только последние утверждения if и else связаны, а первые три являются тремя независимыми операторами if, поэтому каждый раз для первых трех случаев одно из первых условий истинно, а последнее утверждение также верно.

var question=prompt("What is your age?");

if (question == 14) {
    alert("Coupon 1")
}
else if (question == 21) {
    alert("Coupon 2")
}
else if (question == 30) {
    alert("Coupon 3")
}
else if (question == 50){
    alert ("Coupon 4")
}
else {
    alert("No Coupon")
}

читайте о операторах if-else if-else здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню