Почему логический оператор в выражении возвращает вместо булевского значения строку?

https://jsfiddle.net/6r4bmcng/

Почему тут возвращается строка, если && возвращает true, если оба аргумента истинны, а иначе – false. Объясните почему здесь не работает такой принцип.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
potapchino
@potapchino
Потому, что оператор && вычисляет слева направо каждый из своих операндов. Результат вычисление операнда приводится к булевому типу и если он true, переходит к вычислению следующего операнда. Операция повторяется до тех пор, пока результат вычисления очередного операнда не будет false, если это так, то возвращается результат вычисления данного операнда и цепочка обрывается.

Все операнды истины, значит цепочка дойдет до конца и вернет 5
1 && 2 && 3 && 4 && 5 // 5

В цепочке есть ложный операнд, значит он и вернется, а цепочка вычислений на нем закончится
1 && 2 && 0 && 4 && 5 // 0

Цепочка завершится на том операнде для которого вы ответите отрицательно, последующие операнды не будут выполяться
confirm(1) && confirm(2) && confirm(3)

Для оператора || похожая картина. Отличие в том, что цепочка операндов будет выполняться до первого истинного операнда
1 || 2 || 3 || 4 || 5 // 1
0 || false || !!0 || 5 || true || !!1 //5

Цепочка будет выполнятся до тех пор, пока вы не ответите истинно
confirm(1) || confirm(2) || confirm(3)

Т.е. по сути && и || не возвращают true или false. Они возвращают результат вычисления одного из своих операндов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
> && возвращает true
Вы ошибаетесь. https://learn.javascript.ru/logical-ops
Ответ написан
kshshe
@kshshe
Frontend developer
По ссылке из предыдущего ответа: https://learn.javascript.ru/logical-ops
оператор && вычисляет операнды слева направо до первого «ложного» и возвращает его, а если все истинные – то последнее значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы