JAVASCRIPT - Не могу вывести условие с временем. В консоль выводит Доброй ночи Роман, даже если верно другое условие

1.В консоль выводит Доброй ночи Роман, даже если верно другое условие

2.Написать функцию, которой передаем имя, и она возвращает приветствие в зависимости от времени суток (Доброе утро\день\вечер\ночи Иван) - само задание, которое я пытаюсь выполнить

let time1 = new Date('September 21, 2021 20:46:00 +0700');
function setTime(name, time) {
  if (12 > time >= 4) {
    console.log(`Доброе утро ${name}`);
  } else if (20 > time >= 12){
    console.log(`Добрый день ${name}`);
  } else if (23 > time >= 20){
    console.log(`Добрый вечер ${name}`);
  } else {
    console.log(`Доброй ночи ${name}`);
  }
}
setTime("Роман", time1.getHours())

Ответы (1 шт):

Автор решения: Алексей Шиманский

Всё верно. Потому что двойных условных выражений в языке нет.

Вот например 12 > time >= 4. Да, возможно, в математике можно сказать, что time меньше 12 и больше или равно 4. Но в языке таких конструкций нет. Замена такому будет

time < 12 && time >=4

Небольшое дополнение:

Окей. Язык позволяет писать такие условия, но результат выполнения будет не тот, что ожидается. И он немного отличен от тех, что есть в математике.

Если конкретно на одном примере:

if (12 > time >= 4) {

В условии 12 > time результатом будет true или false. Потому что фактически мы как бы виртуально спрашиваем "time меньше 12?". Ответом может быть да или нет. Дальше этот самый true/false идёт в сопоставление с 4. При сравнении булевого типа и числового, первый приводится к числу и потом только производится вычисление. true приводится к числу 1, false к 0. В итоге будет либо 1 >= 4 либо 0 >= 4. Результатом этого выражения опять будет булево. И оно будет всегда false. Итог if (12 > time >= 4) будет false всегда.

Аналогично можно посмотреть другие условия.

→ Ссылка