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

146
03 июля 2017, 20:26

Подскажите, пожалуйста, почему выводит в консоль 1,2,3,4? В моем понимании, должны быть только 3 и 4 (первым срабатывает && где выполняется последний false(3). Далее на проверке || срабатывает последний true(4)). Что не так? Спасибо!!

function zfalse(arg) { 
  console.log(arg); 
  return false; 
} 
 
function ztrue(arg) { 
  console.log(arg); 
  return true; 
} 
 
zfalse(1) || ztrue(2) && zfalse(3) || ztrue(4)

Answer 1

Выполняется все слева направо, если расставить скобки будет понятнее:

zfalse(1) || (ztrue(2) && zfalse(3)) || ztrue(4)

Условия разделенные 'ИЛИ'(||) будут проверяться, пока хотя бы одно из них не вернет true

Условия разделенные 'И'(&&) будут проверяться, пока хотя бы одно из них не вернет false

Т.е.

  1. zfalse(1) - печатает 1, возвращает false, поэтому идет следующая проверка
  2. ztrue(2) && zfalse(3)
    1. ztrue(2) - печатает 2, возвращает true, поэтому идет следующая проверка
    2. zfalse(3) - печатает 3, возвращает false, общее значение выражения - false
  3. ztrue(4) - печатает 4, возвращает true, общее значение выражения - true

В итоге выполнились все функции, следовательно вывелись все числа.

READ ALSO
форматирование текста js/jquery

форматирование текста js/jquery

здравствуйте, есть переменная в которой хранится такой текст:

291
javascript изменение функции

javascript изменение функции

здравствуйте, есть небольшой код

200
Яндекс карты. ymaps is not defined

Яндекс карты. ymaps is not defined

Не получается использовать Яндекс картыПроблему вы уже прочитали в заголовке, при том что я просто скопировал код из примеру, и он уже не работает

693