Я поспорил со своим товарищем по поводу операторов приоритета, и я действительно не понимаю, почему в строках ниже русская фраза не пишет в консоль:
f = () => (console.info('димас проиграл') || 0);
0 && 5 === f();
В документации msdn: https://docs.microsoft.com/en-us/scripting/javascript/operator-subtractprecedence-javascript я вижу, что на первом этапе нам нужно вычислить оператор равенства (===). Это означает, что нам нужно вычислить значения 0 && 5 и f () и после этого сравнить их.
По вычислению f () строка должна быть записана в консоль, но это не так.
0 && 5 === f(); - это 0 && (5 === f());, который, поскольку 0 является ложным коротким замыканием && и не оценивает 5 === f().
каждое ложное значение останавливает оценку следующего выражения с логическим и промежуточным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


&& - это оператор логичный и, его синтаксис следующий:
var result = expression1 && expression2;
Дело в том, что если значение expression1 ложно, его значение будет возвращенным, в противном случае возвращенным значением будет expression2.
Например:
var result = false && getStuff();
Поскольку первое выражение - false, сравнение на этом остановится и вернет false, а getStuff() не будет оцениваться.
В вашем случае 0 оценивается как false. Таким образом, он возвращается, а expression2 даже не оценивается, поэтому f не выполняется.
См. Здесь для получения дополнительной информации о логический оператор И.
0 && false... что должно?