JavaScript - Условные и логические операторы

Александр Мальцев
50K
38
0
Содержание:
  1. Условные операторы JavaScript
  2. Условный оператор if
  3. Оператор if...else
  4. Правило приведения условия к true или false
  5. Оператор else if... (несколько условий)
  6. Условный (тернарный) оператор (?:)
  7. Оператор switch
  8. Логические операторы
  9. Комментарии

В этой статье рассмотрим условные и логические операторы языка JavaScript.

Условные операторы JavaScript

Условные операторы - это операторы языка JavaScript (ECMAScript), которые в зависимости от некоторого условия позволяют выполнить одно или несколько определённых инструкций.

Формы условных операторов в JavaScript:

  • условный оператор if (с одной ветвью);
  • условный оператор if...else (с двумя ветвями);
  • условный оператор else if... (с несколькими ветвями);
  • тернарный оператор (?:);
  • оператор выбора switch.

Условный оператор if

Синтаксис оператора if:

if (условие)
  инструкция

Условный оператор if состоит из:

  • ключевого слова if;
  • условия (выражения в круглых скобках), которое должно равняться true или false (или быть приведено к одному из этих значений);
  • инструкции, которую нужно выполнить, если условие является true или приведено к нему.

Например:

if (true)
  count = 4;

В этом примере в качестве условия используется значение true. Это означает, что инструкция count = 4 будет выполняться всегда. Данный пример просто приведен для пояснения принципа работы оператора if, т.к. он лишён всякого смысла.

Например, увеличим значение переменной votes на 1, если она (её тип) является числом:

if (typeof votes === 'number')
  votes++;

Если необходимо выполнить несколько инструкций, то их необходимо поместить в фигурные скобки:

if (typeof votes === 'number') {
  votes++;
  console.log('Число голосов: ' + votes);
}

Рекомендуется, использовать фигурные скобки даже когда используется одна инструкция:

if (typeof votes === 'number') {
  votes++;
}

Оператор if...else

Оператор if...else используется, когда необходимо при истинности условия выполнить одни инструкции, а при ложности - другие.

Синтаксис:

if (условие) {
  одно или несколько инструкций (будут выполняться, когда условие равно true или приведено к true)
} else {
  одно или несколько инструкций (будут выполняться, когда условие равно false или приведено к false)
}

Например, выведем в консоль сообщение о том, является ли число четным или нет:

if (number % 2) {
  console.log('Число нечётное!');
} else {
  console.log('Число чётное!');
}

Правило приведения условия к true или false

Если выражение в условии оператора if не равно true или false, то JavaScript приведёт его к одному из этих значений. Данное действие он выполняет с помощью так называемого "правила лжи".

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

  • false (ложь);
  • "" или '' (пустая строка);
  • NaN (специальный числовой тип данных «не число»);
  • 0 (число «ноль»);
  • null («пустое» значение);
  • undefined («неопределённое» значение).

Например, выведем в консоль браузера приветственное сообщение, в зависимости от того какое значение хранится в переменной nameUser:

if (nameUser) {
  console.log('Привет, ' + name + '!');
} else {
  console.log('Привет, гость!');
}

Если переменная nameUser будет содержать пустую строку, то по правилу лжи, она будет приведена к значению false. Следовательно, в консоль будет выведено сообщение «Привет, гость!».

А если, например, переменная nameUser будет содержать строку «Тимур», то выражение в условии будет приведено к значению true. В результате, в консоли отобразится сообщение «Привет, Тимур!».

Оператор else if... (несколько условий)

Синтаксис:

if (условие1) {
  инструкции 1
} else if (условие2) {
  инструкции 2
} else if (условие3) {
  инструкции 3
//...
} else if (условиеN) {
  инструкции N
} else {
  инструкции, которые будут выполнены, если ни одно из условий не равно true или не приведёно к этом значению 
}

Условный (тернарный) оператор (?:)

Тернарный оператор – оператор JavaScript, который можно использовать, когда необходимо в зависимости от условия выполнить одно из двух заданных выражений.

Синтаксис:

условие ? выражение1 : выражение2

Тернарный оператор состоит из трех операндов, которые разделяются с помощью символов ? и :. Условие тернарного оператора задаётся в первом операнде. Его также можно заключить в скобки. Если условие равно true или будет приведено к этому значению будет выполнено выражение1, иначе - выражение 2.

Например:

(number > 10) ? console.log('Число больше 10!') : console.log('Число меньше или равно 10');

В JavaScript допустимы множественные тернарные операторы (?:):

var dayNumber = new Date().getDay();

day =
  (dayNumber === 0) ? 'Воскресенье' :
    (dayNumber === 1) ? 'Понедельник' :
      (dayNumber === 2) ? 'Вторник' :
        (dayNumber === 3) ? 'Среда' :
          (dayNumber === 4) ? 'Четверг' :
            (dayNumber === 5) ? 'Пятница' :
              (dayNumber === 6) ? 'Суббота' : 'Неизвестный день недели';

console.log('Сегодня ' + day.toLowerCase() + '.');

Вышеприведённый пример, но с использованием множественной записи оператора if...else:

var dayNumber = new Date().getDay();

if (dayNumber === 0) {
  day = 'Воскресенье';
} else if (dayNumber === 1) {
  day = 'Понедельник';
} else if (dayNumber === 2) {
  day = 'Вторник';
} else if (dayNumber === 3) {
  day = 'Среда';
} else if (dayNumber === 4) {
  day = 'Четверг';
} else if (dayNumber === 5) {
  day = 'Пятница';
} else if (dayNumber === 6) {
  day = 'Суббота';
} else {
  day = 'Неизвестный день недели';
}

console.log('Сегодня ' + day.toLowerCase() + '.');

Оператор switch

Оператор switch предназначен для выполнения одного варианта инструкций из нескольких в зависимости от значения выражения. Выбор того или иного варианта определяется посредством строгого равенства результата выражения значению случая (case).

Синтаксис оператора switch:

switch (выражение) {
  case значение1:
    // ... инструкции, которые будут выполнены, если результат вычисления выражения равен «значение1»
    break; // необязательная инструкция (если её не использовать, то будет выполнена следующая команда оператора switch)
  case значение2:
    // ... инструкции, которые будут выполнены, если результат вычисления выражения равен «значение2»
    break; // необязательная инструкция (если её не использовать, то будет выполнена следующая команда оператора switch)
  // ...
  case значениеN:
    // ... инструкции, которые будут выполнены, если результат вычисления выражения равен «значениеN»
    break; // необязательная инструкция (если её не использовать, то будет выполнена следующая команда оператора switch)
  default:
    // инструкции, которые будут выполнены, если результат выражения не равен не одному из значений
}

Ключевое слово default является необязательным. Оно используется, когда необходимо задать инструкции, которые нужно выполнить, если результат выражения будет не равен ни одному значению варианта (case).

Инструкция break является необязательной. Она предназначена для прерывания выполнения оператора switch и передачи управлению инструкции, идущей после него.

Например, выведем сообщение в консоль браузера о количестве конфет:

var 
  countCandyBoys = 1,
  countCandyGirls = 2,
  message;
switch (countCandyBoys + countCandyGirls) {
  case 1: 
    message = 'Одна конфета';
    break;
  case 2:
  case 3:
    message = 'Две или три конфеты';
    break;
  case 4:
    message = 'Четыре конфеты';
    break;
  default:
    message = 'Не одна, не две, не три и не четыре конфеты';
}
// выведем сообщение в консоль
console.log(message);

В вышеприведенном примере вычисленное выражение равно 3. Следовательно, будет выполнены инструкции message = 'Две или три конфеты' и break. Инструкция break прервёт дальнейшее выполнение оператора switch и передаст управление инструкции, идущей после него, т.е. console.log(message). Она выведет в консоль сообщение «Две или три конфеты».

Например, выведем выведем в консоль текущий день недели:

var day = '';

switch(new Date().getDay()) {
  case 0:
    day = 'Воскресенье';
    break;
  case 1:
    day = 'Понедельник';
    break;
  case 2:
    day = 'Вторник';
    break;
  case 3:
    day = 'Среда';
    break;
  case 4:
    day = 'Четверг';
    break;
  case 5:
    day = 'Пятница';
    break;
  case 6:
    day = 'Суббота';
    break;
  default:
    day = 'Неизвестный день недели';
}

console.log('Сегодня ' + day.toLowerCase() + '.');  

Пример, в котором не используется инструкция break:

var result = 'success';

switch (result) {
  case 'success':
    console.log('Успех!');
  case 'invalidCaptcha':
    console.log('Неверная капча!');
  default:
    console.log('Ошибка!');
}

В этом примере выражение оператора switch равно success. Следовательно, будет выполнена инструкция console.log('Успех!'), которая выведет сообщение «Успех!» в консоль. Но так как после неё нет инструкции break, то выполнение скрипта будет продолжено в следующем варианте. Таким образом, инструкции будут выполняться до тех пока пока на пути не встретиться break или не будет достигнут конец оператора switch. В результате выполнения этого примера в консоль будут выведены 3 сообщения: «Успех!», «Неверная капча!» и «Ошибка!».

В некоторых случаях может требоваться именно такое поведение, но не в этом. Здесь просто допущена ошибка.

Исправленный вариант примера:

var result = 'success';

switch (result) {
  case 'success':
    console.log('Успех!');
    break;
  case 'invalidCaptcha':
    console.log('Неверная капча!');
    break;
  default:
    console.log('Ошибка!');
}

Логические операторы

В JavaScript различают следующие логические операторы:

  • && - логическое "И";
  • || - логическое "ИЛИ";
  • ! -логическое "НЕ".

Если в логическом выражении operand1 && operand2 используются булевы значения, то результатом этого выражения будет значение true, если каждый из них равен true; иначе значением этого выражения будет значение false.

false && false // false
true && false // false
false && true // false
true && true // true

Если в логическом выражении operand1 && operand2 используются не булевы значения, то результатом этого выражения будет operand1, если его можно привести к false; иначе результатом этого выражения будет operand2.

5 && 0 // 0
1 && 5  // 5
'строка' && undefined // undefined
'строка1' && 'строка2' // 'строка2'

Если в логическом выражении operand1 || operand2 используются булевы значения, то результатом этого выражения будет значение true, если хотя бы один из них равен true; иначе значением этого выражения будет значение false.

false || false // false
true || false // true
false || true // true
true || true // true

Если в логическом выражении operand1 || operand2 используются не булевы значения, то результатом этого выражения будет operand1, если его можно привести к true; иначе результатом этого выражения будет operand2.

5 || 0 // 5
1 || 5  // 1
'строка' || undefined // 'строка'
'строка1' || 'строка2' // 'строка1'

Результатом логического выражения !operand1 будет значение true, если operand1 равно false или его можно привести к этому значению; иначе результатом этого выражения будет значение false.

!false // true
!true // false
!'строка' // false
!5 // false'

Комментарии:

  1. Катя
    19 апреля 2021, 18:12
    Здравствуйте!
    Подскажите, пожалуйста, у меня такой вопрос: почему, если написать такое условие (например)
    if (false) alert('Верно!'); else alert('Неверно!');
    компилятор «пойдет» в ветку else?.. Искала в интернете этот момент, но интернет не очень понимает мой вопрос :)
    Спасибо!
    1. Александр Мальцев
      20 апреля 2021, 01:19
      Привет!
      В условии оператора if находится false. Значит оно ложно. А если ложно, то выполняется else.
      1. Катя
        20 апреля 2021, 09:45
        Да, точно) в голове путались понятия ложности условия и ложности значения переменной в условии) спасибо!!!
    2. Карина
      02 февраля 2021, 20:58
      Здравствуйте. Я только начала учить JS. Есть такая задача (всем известная):
      Если переменная a равна нулю или равна двум, то прибавьте к ней 7, иначе поделите ее на 10. Выведите новое значение переменной на экран. Проверьте работу скрипта при a, равном 5, 0, -3, 2.

      Я уже раз 10 код переделывала. Ничего не выходит. В учебнике такой инфо нет.

      Не хочу здесь писать все свои неправильные варианты. Можете правильный написать. Я хоть проанализирую и пойму.

      А то уже психовать начала…
      1. Карина
        02 февраля 2021, 21:35
        Спасибо, уже поняла. Не тот знак вычисления поставила…
      2. Ekaterina
        20 ноября 2020, 17:57
        Александр, подскажите, пожалуйста, где ошибка?
        Условие: волонтеры разделены на 5 групп с равным кол-вом человек в каждой. Если в какой-либо группе меньше 5 человек, то для восстановления количества, необходимо набрать еще волонтеров. Напишите программу, которое берет фактическое количество волонтеров в качестве вводных данных и выводит в консоль количество кол-во волонтеров, которое необходимо нанять, чтобы во всех 5 группах их было поровну.

        Пример ввода данных: 24
        Пример выходных данных: 1

        Пояснение: ближайшее число к 24, кратное 5-25, поэтому нам нужен еще 1 волонтер (24+1=25), чтобы во всех группах было равное количество.
        Если дополнительные волонтеры не требуются -то результат должен быть равен 0.
        Используйте оператор (%) деления по модулю для возврата остатка от деления.

        Решение:
        function main() {
          var numberVolunteers = parseInt(readLine(), 10)
          // введите ваш код сюда
          if (numberVolunteers % 5 = 0) {
            console.log(0)
          } else {
            console.log( не знаю)
          }
        }
        
        В заданном условии три вводных числа: 14,36 и 25.
        1. Александр Мальцев
          21 ноября 2020, 12:18
          Код будет следующим:
          if (numberVolunteers % 5 === 0) {
            console.log(0)
          } else {
            console.log(5 - numberVolunteers % 5)
          }
          
          1. Vlad Kallistov
            17 января 2021, 13:35
            А можно всё это записать по другому, например при помощи оператора «?:», а не «if else». Если можно, то как? Я учусь по программе и она мне задала такую же задачу но «if else» по ходу обучения не было, а значит наверное можно с помощью «?:». Подскажите как решить?
            1. Александр Мальцев
              18 января 2021, 14:04
              Конечно можно. Будет так:
              const result = numberVolunteers % 5 === 0 ? 0 : 5 - numberVolunteers % 5;
              console.log(result);
              
              1. Vlad Kallistov
                18 января 2021, 14:49
                А что за const result, ет типо переменная, в проге где я учусь нужно var (переменная)=..., Можеш обеснить почему const result, и в кратце код, я думал ?: Может вывести только false или true а обе сразу не может. А там выводиться обе.
                1. Александр Мальцев
                  18 января 2021, 16:15
                  Какие ключевые слова имеются в JavaScript для создания переменных можешь почитать в этой теме. Там всё подробно описано.
                  Язык JavaScript быстро развивается. Программа для обучения наверно просто не включает изучения нового синтаксиса.
                  В тернарном операторе «?:» сначала указывается условие. В данном примере — это «numberVolunteers % 5 === 0». Когда оно истинно возвращается то, что указано после знака «?», в данном случае — 0. В противном случае (когда условие ложно) то, что идёт после «:». Здесь — результат вычисления выражения: «5 — numberVolunteers % 5».
                  1. Vlad Kallistov
                    18 января 2021, 16:25
                    Типерь понял спасибо )) вы Кросс.
                2. Vlad Kallistov
                  18 января 2021, 14:40
                  Ну ничего себе, ты мастак. СПС большое.
          2. Ekaterina
            19 ноября 2020, 14:41
            Александр, добрый день!
            Решаю задачи на тренажере.
            Подскажите, пожалуйста, что я делаю не так?

            Условие:
            Напишите программу, которая в качестве вводных данных использует возраст пользователя, проверяет, является ли пользователь взрослым, и выводит в консоль соответствующее логическое значение.

            Пример ввода данных: 20
            Пример выходных данных: true

            Если пользователю 18 лет, то он считается взрослым.

            Код:
            function main() {
              var age = parseInt(readLine(age), 10)
              // дальше нужно ввести свой код. Мой код:
              if ( age>=18 ) {
                return true
              } else{
                return false
              }
            }
            
            В тренажере в результате стоит значение 15, то есть ожидаемый результат в этом случае false.
            Мне указывает «Неверно, ищи ошибку».
            1. Александр Мальцев
              19 ноября 2020, 15:10
              Вывод в консоль выполняется с помощью «console.log».
              Может так:
              // дальше нужно ввести свой код
              console.log(age >= 18);
              
              1. Ekaterina
                19 ноября 2020, 16:23
                Ура! Получилось, спасибо!
                Правильно вот так:
                if (age >=18 ) {
                  console.log(true)
                }
                else {
                  console.log(false)
                }
                
                Александр, можно уточнится еще. Почему, когда я возвращаю значение через return, результат неверный? Это так настроен тренажер? Ведь если я в рабочем режиме пишу приложение, в консоль я вывожу только же для того, чтобы проверить код. Правильно ли я понимаю?
                1. Александр Мальцев
                  19 ноября 2020, 16:41
                  У вас же в задании было условие вывести в консоль, а не вернуть значение. Это разные вещи. Да, консоль обычно применяется при разработке кода, для вывода разных сообщений. На продакшене такое обычно не используют.
                  1. Ekaterina
                    20 ноября 2020, 12:12
                    Ясно, спасибо за разъяснения!
            2. Vadim
              27 октября 2020, 17:16
              и еще подсобите с этим заданием

              Функция getRectangleArea принимает 1 сторону side, и диагональ diagonal прямоугольника. Проверь это прямоугольник (диагональ не может быть меньше сторону прямоугольника). Думал математика не понадобится в жизни? Верни площадь этого прямоугольника или строку not a rectangle если это не прямоугольник. Если результат не целое число, округли значение до 2 знаков после запятой.

              примеры:

              getRectangleArea (10, 20) === 173.2
              getRectangleArea (9, 18) === 140.29
              getRectangleArea (100, 98) === 'not a rectangle'

              спасибо
              1. Александр Мальцев
                28 октября 2020, 12:12
                Пример решения задачи:
                // side - сторона прямоугольника
                // diagonal - диагональ прямоугольника
                const getRectangleArea = (side, diagonal) => {
                  if (side > diagonal) {
                    return 'not a rectangle';
                  }
                  return Math.floor(Math.sqrt(Math.pow(diagonal, 2) - Math.pow(side, 2)) * side * 100) / 100;
                }
                
              2. Vadim
                27 октября 2020, 13:12
                приветствую!
                помогите решить задачу

                Через каждые N месяцев IT School проводит networking вечеринку для новых студентов, выпускников, и тех, кто хочет начать учиться в IT School.

                Но иногда все идет не так как хотелось и заведения закрываются на карантин. Посчитай в функции countNetworking сколько вечеринок проведет IT School за год, зная продолжительность карантина K в месяцах, который может начаться только в начале года.

                примеры:

                countNetworking (11, 1) === 1 K = 11 N = 1, всего одна вечеринка.
                countNetworking (0, 6) === 2 K = 0, N = 6, две вечеринки в год.
                countNetworking (2, 2) === 5 K = 2, N = 2, 5 вечеринок
                countNetworking (6, 3) === 2 K = 6, N = 2, встречи на 1 и 4 месяца. Все остальное время заведения на карантине.

                спасибо
                1. Александр Мальцев
                  27 октября 2020, 15:44
                  Привет!
                  Её можно решить так:
                  // k - карантин в месяцах с начала года
                  // n - через какое количество месяцев проводится вечеринка
                  const countNetworking = (k, n) => {
                    return parseInt((12 - k) / n);
                  }
                  
                2. Vadim
                  26 октября 2020, 15:54
                  Приветствую
                  помогите разобраться где ошибка
                  спасибо
                  function getBoolean(a, b, c, d) {
                    if (a) {
                      if (a > b) {
                        if (c > d) {
                          if (a < c) {
                            return true;
                          }
                        }
                      }
                    } if (b) {
                        if (b > a) {
                          if (c > a) {
                            return true;
                          }
                        }
                    } if (c > d) {
                        if (d) {
                          if (d < a) {
                            return true;
                          }
                        }
                    }
                  }
                  
                  1. Vadim
                    26 октября 2020, 16:58
                    вот более полный код но все равно выбивает ошибку
                    function getBoolean(a, b, c, d) {
                      if (a) {
                        if (a > b) {
                          if (c > d) {
                            if (a < c) {
                              return true;
                            }
                          }
                        }
                      } if (b) {
                          if (b > a) {
                            if (c > a) {
                              return true;
                            }
                          }
                      } if (c > d) {
                          if (d) {
                            if (d < a) {
                              return true;
                            }
                          }
                      } 
                      else {
                        return false;
                      }
                    }
                    
                    1. Vadim
                      26 октября 2020, 17:09
                      разобрался :)
                  2. Vadim
                    23 октября 2020, 11:07
                    Добрый день.
                    Как переписать данный код в switch case?
                    function manageHomeRoutines(task) {
                      return task === 'clean' ? 'petya'
                        : task === 'make_breakfast' ? 'misha' : task === 'write_code' ? 'petya'
                          : task === 'adjust_lights' ? 'vasya' : task === 'review_pull_request'
                            ? 'misha'
                            : task === 'set_up_an_alarm' ? 'siri' : task
                              === 'check_weather' ? 'siri'
                              : task === 'take_out_garbage' ? 'vasya' : 'masha';
                    }
                    
                    1. Александр Мальцев
                      23 октября 2020, 12:08
                      Привет!
                      Код в этой конструкции будет следующим:
                      function manageHomeRoutines(task) {
                        switch (task) {
                          case 'clean':
                            return 'petya';
                          case 'make_breakfast':
                            return 'misha';
                          case 'write_code':
                            return 'petya';
                          case 'adjust_lights':
                            return 'vasya';
                          case 'review_pull_request':
                            return 'misha';
                          case 'set_up_an_alarm':
                            return 'siri';
                          case 'check_weather':
                            return 'siri';
                          case 'take_out_garbage':
                            return 'vasya';
                          default:
                            return 'masha';
                        }
                      }
                      
                      1. Vadim
                        23 октября 2020, 11:07
                        спасибо
                      2. Margaret
                        09 сентября 2020, 22:46
                        Привет!

                        Как быть с простейшей задачкой?

                        //нужно рассчитать значение, которое в итоге будет в переменной z

                        int x = 7;
                        int y = 9;
                        int z = 5;
                        if(x + z > y){
                        y += x + z;
                        z = y — 5;
                        }
                        else{
                        y -= x + z;
                        z = y — 5;
                        }
                        1. Александр Мальцев
                          10 сентября 2020, 03:45
                          Привет! Это же не JavaScript.
                          Тут всё просто:
                          int x = 7;
                          int y = 9;
                          int z = 5;
                          // 7 + 5 > 8 -  истина 
                          if(x + z > y){
                          // y будет равен y + x + z, т.е. 21
                          y += x + z;
                          // z будет равен 21 - 5, т.е. 16
                          z = y — 5;
                          }
                          else{
                          y -= x + z;
                          z = y — 5;
                          }
                          
                          В результате, в z будет значение 16.
                        2. Navolokin Roman
                          18 августа 2020, 19:24
                          Наш робот принимает команду в свой терминал в виде строки back,forward, left, right, stop. Далее своими кибер мозгами он молниеносно конвертирует значение в x и y и посылает импульс с координатами в свои робоконечности в виде строки hor=x ver=y Так, например, команда left это сигнал -1 для x и сигнал 0 для y, а forward это сигнал 0 для x и сигнал 1 для y. Ну как? Поможешь нам научить нашего робота ходить правильно? Нам нужна функция getDirection, которая будет принимать строкуdirection с направлением движения и возвращать строку в формате упомянутом выше. А и еще… Наш робот еще не проходил наши уроки по conditional operators, поэтому придется использовать switch case. Для команд которые не может обработать наш робот используй блок default в switch case в котором сигналы для x и y будут равны 0.

                          Если есть время, подскажите с решением
                          1. Александр Мальцев
                            20 августа 2020, 04:54
                            Рещить эту задачку можно так:
                            const getDirection = (direction) => {
                              let x = 0;
                              let y = 0;
                              switch (direction) {
                                case 'back':
                                  x = 0;
                                  y = -1;
                                  break;
                                case 'forward':
                                  x = 0;
                                  y = 1;
                                  break;
                                case 'left':
                                  x = -1;
                                  y = 0;
                                  break;
                                case 'right':
                                  x = 1;
                                  y = 0;
                                  break;
                                case 'stop':
                                  x = 0;
                                  y = 0;
                                  break;
                                default:
                                  x = 0;
                                  y = 0;
                                  break;
                              }
                              return `hor=${x} ver=${y}`;
                            };
                            
                            1. Navolokin Roman
                              20 августа 2020, 08:34
                              Спасибо, что помогаете
                          2. Navolokin Roman
                            18 августа 2020, 13:51
                            Создай функцию getLargestExpressionResult, которая принимает два числа a и b и возвращает наибольший возможный результат среди выражений:

                            a + b
                            a — b
                            a * b
                            a / b
                            ограничения:

                            Имей в виду, что a и b могут быть отрицательными.
                            Не используй тернарный оператор или ключевое слово else.
                            Не используй объект Math.

                            подскажите с решением
                            1. Александр Мальцев
                              18 августа 2020, 15:53
                              В этом случае можно результаты операций представить посредством массива. А затем с помощью forEach найти среди них максимальный:
                              // объявляем функцию getLargestExpressionResult
                              const getLargestExpressionResult = (a, b) => {
                                const items = [a + b, a - b, a * b, a / b];
                                let max = items[0];
                                items.forEach((item) => {
                                  if (item > max) {
                                    max = item;
                                  }
                                });
                                return max;
                              };
                              
                              // вызываем функцию getLargestExpressionResult и сохраняем результат в max
                              const max = getLargestExpressionResult(5, 5);
                              // выводим max в консоль
                              console.log(max);
                              
                            2. Probel
                              19 сентября 2019, 18:46
                              Спасибо большое, буду внимательнее! Не придал значение id
                              1. Probel
                                14 сентября 2019, 22:43
                                Подскажите пожалуйста. У меня имеется массив постов. Мне нужно считывать из каждого нового поста определенное поле и записывать его значение в переменную для обработки условным оператором что бы выводить нужную мне надпись. Но в переменную записывается значение только из последнего выведенного поста. И как итог во всех постах выводится одно значение истины.
                                Вот сам код:
                                <?php if( is_category() ) {
                                  $cat_name = get_queried_object()->name;
                                  $cat_slug = get_queried_object()->slug;
                                  echo $cat_name;
                                }
                                ?>
                                
                                <?php 
                                // параметры по умолчанию
                                  $args = array(
                                    'numberposts' => -1,
                                    'category'    => ("65"),
                                    'orderby'     => 'ID',
                                    'order'       => 'ASC',
                                    'include'     => array(),
                                    'exclude'     => array(),
                                    'meta_key'    => '',
                                    'meta_value'  =>'',
                                    'post_type'   => 'post',
                                    'suppress_filters' => true, // подавление работы фильтров изменения     SQL запроса
                                  );
                                  $posts = get_posts($args);
                                  foreach ($posts as $post) {
                                    setup_postdata($post);
                                ?>
                                
                                <!-- Тут выводим содержимое массива -->
                                <div class="col-lg-4">
                                  <div class="item_buldors_new">
                                    <a href="<?php the_permalink(); ?>">
                                      <div class="buldors_new_title">
                                        <h2><?php the_field("model_buldors"); ?></h2>
                                        <span class="buldors_new_discription"><?php the_field("lozung_buldors"); ?></span>
                                      </div>
                                      <div class="buldors_new_img">
                                        <?php the_post_thumbnail(); ?>
                                        <span class="buldors_new_price">От <span><?php the_field("prace_buldors"); ?></span> руб.</span>
                                        <span class="buldors_new_akcia">
                                          <span id="buldors_new_akcia" val="<?php the_field("prace_buldors"); ?>"></span>
                                          <script>
                                            var buldors_new_akcia, result;
                                            buldors_new_akcia = document.getElementById('buldors_new_akcia').value;
                                            buldors_new_akcia = parseInt(buldors_new_akcia);
                                            price = 17000;  
                                            if (buldors_new_akcia >= price) {
                                                console.log('Монтаж в подарок!');
                                            } else {
                                                console.log('Доставка в подарок!');
                                            }
                                          </script>
                                        </span>
                                      </div>
                                    </a>
                                    <p><?php the_excerpt(); ?></p>
                                  </div>
                                </div>
                                <?php
                                  }
                                  wp_reset_postdata(); // сброс
                                ?>
                                
                                Помогите как спасти ситуацию.
                                1. Александр Мальцев
                                  16 сентября 2019, 14:56
                                  Привет!
                                  Нельзя элементам на странице назначать один и тот же id:
                                  <span id="buldors_new_akcia" val="<?php the_field("prace_buldors"); ?>"></span>
                                  
                                  У тебя выводится значение истины всегда для первого элемента, который первым встречается на странице с указанным id. Здесь необходимо использовать классы.
                                  При этом скрипт желательно создать всего один раз на странице и обработать с помощью него сразу все элементы и вывести то что необходимо.
                                  Например:
                                  <script>
                                    var
                                      elements = document.querySelectorAll('.buldors_new_akcia :first-child'),
                                      price = 17000;
                                  
                                    elements.forEach(function (element) {
                                      var newElement = document.createElement('span');
                                      if (element.getAttribute('val') > price) {
                                        newElement.textContent = 'Монтаж в подарок!';
                                      } else {
                                        newElement.textContent = 'Доставка в подарок!';
                                      }
                                      element.parentElement.append(newElement);
                                    })
                                  </script>
                                  
                                  Данный скрипт в каждом элементе с классом buldors_new_akcia создаёт новый элемент span с текстом соответствующей акции.
                                Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.