@Newbie2

Ветвление if в javascript. Почему не работает?

Здравствуйте все!
Пытаюсь написать программу на javascript и столкнулся со сложностью в использовании оператора IF.

Вот код моей программы:
Оператор if - else if

(function()

{

     var number_cam, count_dvr;
     number_cam = 17;
      if (number_cam < 1)
          {
              count_dvr = 0;
          }
      else if (1 < number_cam < 5)
          {
              count_dvr = 4;
          }
      else if  (4 < number_cam < 9)
          {
              count_dvr = 8;
          }
      else if  (8 < number_cam <16)
          {
              count_dvr = 16;
          }
      else if  (16 < number_cam < 33)
          {
              count_dvr = 32;
          }
  console.log(count_dvr);
}
)
();


Я ожидаю, что если number_cam будет меньше 1, то count_dvr=0, если от 1 до 4, то count_dvr=4, если от 5 до 8, то count_dvr=8 и т.д.

На деле же, какое бы я значение не задал переменной number_cam, то я всегда получаю count_dvr=4. Пробовал менять оператор else if на if - безрезультатно.

Вот в этом уроке разбирается несколько условий else-if и там код работает.
Что не так в моем коде?
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
Вместо:
(1 < number_cam < 5)

Пишите:
(1 < number_cam && number_cam < 5)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. 1 < number_cam < 5 вычисляется как ((1 < number_cam) < 5).
Соответственно, получаем
((1 < 17) < 5) ≡ ((true) < 5 ≡ (1 < 5) ≡ true
Значит условие выполнится и сработает ветка count_dvr = 4;

2. Вы пропустили случай, когда number_cam === 1.

В целом, ваш код проще всего записать так:
const count_dvr = (number_cam) => {
  if (number_cam < 1) {
    return 0;
  }
  if (number_cam < 5) {
    return 4;
  }
  if (number_cam < 9) {
    return 8;
  }
  if (number_cam < 17) {
    return 16;
  }
  if (number_cam < 33) {
    return 32;
  }
  return 64;
};
console.log(count_dvr(17));
// 32
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы