Почему в javascript нельзя писать условия if через “a === (b || c)”

160
02 июля 2018, 23:20

В общем заголовок вопроса полностью исчерпывающий. Просто хочу понять, почему в javascript нельзя писать условия if через "a === (b || c)", типа:

var a = 2,
    b = 2,
    c = 3;
if (a === (b || c)) {
  console.log(a)
}
return null

Или иначе, если это не реализуемо:

  • как можно записать более лаконичную версию if (a === b || b === c)
Answer 1

Писать условие a === b || b === c как b === (a || c) нельзя по той простой причине что эти выражения не эквивалентны. В Javascript операции выполняются не в том порядке в котором они "выполняются" в русском языке, а в соответствии с фиксированными приоритетами и довольно простой грамматикой. Конкретно в выражении b === (a || c) сначала вычисляется a || c - в результате чего получается одно число, с которым и сравнивается b. Для того чтобы сравнить b с двумя числами, надо выполнить два сравнения.

Вообще, условие a === b || b === c по своей форме довольно простое и нет смысла пытаться упрощать его.

Но если по какой-то причине дублировать b нежелательно (например, пишется Write-Only однострочник) - можно использовать массив и метод includes: [a, c].includes(b)

Answer 2

let test = (a, b, c) => { 
  return (a === (b || c)); 
} 
 
console.info(test(2, 2, 3)); 
console.info(test(2, 2)); 
console.info(test(2, undefined, 3));

READ ALSO
Как оптимизировать метод для работы с разными файлами?

Как оптимизировать метод для работы с разными файлами?

Есть метод для добавления пар ключ - значение в проперти файл словаря, дело в том, что я не знаю как его сделать универсальным, те

185
Не заполняется поле “Дата рождения” в Selenium Web driver

Не заполняется поле “Дата рождения” в Selenium Web driver

Не заполняется поле "Дата рождения" при запуске тест passed, сделал проверку на заполнение полей, выдает асертЭлемент находит, но почему-то пропускает...

153
Java и самоподписанные SSL сертификаты

Java и самоподписанные SSL сертификаты

Стоит сервер - клиентское приложение , использующее в своей работе Java и TomCatПри соединении клиентского приложения с серверной частью по протоколу...

204
Как реализовать вывод фотографий через JSON запрос к серверу?

Как реализовать вывод фотографий через JSON запрос к серверу?

Требуется реализовать возможность вывода фотографий после получения ответа JSON с сервераВ этом ответе содержаться прямые ссылки на фотографии

172