Всем здравствуйте!
Объясните, пожалуйста, почему, если записать условие в формате двойного неравенства
if ( weight < 4 ) {
recommendation = ‘Пора перекусить’;
} else if ( 4 <= weight <=5.5 ){
recommendation = ‘Вес в норме’;
} else if ( weight > 5.5 ){
recommendation = ‘Пора на тренировку’;
}
выполняется 3 из 4 проверок.
Если же записать условие через логический оператор &&, то успешно выполняются все 4 проверки.
if ( weight < 4 ) {
recommendation = ‘Пора перекусить’;
} else if ( weight >= 4 && weight <=5.5 ){
recommendation = ‘Вес в норме’;
} else if ( weight > 5.5 ){
recommendation = ‘Пора на тренировку’;
всегда помним, что значение внутри скобочек в if должно возвращать true, чтобы исполнилось тело условия. также, JS последовательно исполняет операторы в порядке их приоритета слева направо (как правило).
представьте, что первая проверка дает всегда false, чтобы пройти на вторую:
Сводка
if ( false ) {
recommendation = 'Пора перекусить';
} else if (4 >= weight <= 5.5 ){
recommendation = 'Вес в норме';
} else {
recommendation = 'Пора на тренировку';
}
мы сравниваем 4 и weight, независимо от значения weight мы получим false или true, т.е. 0 или 1. и вот их сравниваем с <= 5.5.
Т.к. 0 или 1 меньше 5.5, то в ответ всегда будем иметь true в результате второй проверки на условие (до третьей в принципе не дойдет и значение ‘Пора на тренировку’ мы никогда не получим).
Поэтому у вас и срабатывает 3 из 4 проверок (1 тест на первое условие, 2 теста на второе условие, 1 тест на третье условие).
Вообще конечно не рекомендуется использовать в сравнении в левой части число, а справа переменную. Да и в принципе двойные неравенства лучше не использовать, из-за непредсказуемости (на первый взгляд) логики JS. Используйте логику &&.
оффтоп
а знаете, вы меня толкнули на интересную мыслю.
а что, если вообще убрать >= 4?
ведь мы имеем дело с 3 интервалами: от минус-бесконечности до 4 включительно, от 4 невключительно до 5.5 включительно, от 5.5 невключительно до плюс-бесконечности.
получается достаточно прописать, что будет меньше 4, меньше либо равно 5.5 и иначе =)
1 лайк
Перечитав раза 3 ответ, делаю для себя вывод, что
Да и в принципе двойные неравенства лучше не использовать, из-за непредсказуемости (на первый взгляд) логики JS. Используйте логику &&.
Спасибо за столь развернутый ответ) Я его ещё перечитаю, когда под рукой будет ручка, чистый лист и свежая голова