Проходил тест. В ответах теста написано что верный ответ "2". Но ИМХО это бред и правильный ответ "1".
Кто прав?
JavaScript
Чему равно значение выражения - "0 || 1 && 2 || 3" ?
а javascript от рождения язык бредовый
применять булевые операции к числам, как к объектам - это просто один из маразмов,
впереди тебя ещё ждёт много удивительных открытий
применять булевые операции к числам, как к объектам - это просто один из маразмов,
впереди тебя ещё ждёт много удивительных открытий
Чудик, ты сейчас использовал браузер, чтобы задать этот вопрос. Вместо этого ты мог просто открыть консоль браузера и вставить туда выражение.
F12 -> консоль
F12 -> консоль
Конечно тест условия выполняются с лева на право
первое условие || гласит если 0 значить перейти в право там у тебя 1 с условием && которое гласит
если не ноль от перейти в право там у тебя сново 2 с условем || если ноль то перейти в право но 2 эта не 0 потому дальнейшие прохождение условий заканчивается и выводится 2
⚤
первое условие || гласит если 0 значить перейти в право там у тебя 1 с условием && которое гласит
если не ноль от перейти в право там у тебя сново 2 с условем || если ноль то перейти в право но 2 эта не 0 потому дальнейшие прохождение условий заканчивается и выводится 2
⚤
&& - оператор логического И.
Его второй операнд не вычисляется (и не возвращается) только в случае ложности первого.
А в данном случае, первый операнд && истинный: Boolean(1)===true. Поэтому, возвращается значение второго (число 2).
Число 1 было верным ответом при использовании того же логического оператора || (ИЛИ) вместо &&. То есть, при выражении 0 || 1 || 2 || 3;
При истинности первого операнда, оператор || его сразу возвращает, "не обращая внимания" на второй.
Приоритет этих логических операторов равен, то есть порядок вычисления выражения такой:
((0 || 1) && 2) || 3
, и само вычисление производится так:
0 || 1 && 2 || 3
1 && 2 || 3
2 || 3
2
Его второй операнд не вычисляется (и не возвращается) только в случае ложности первого.
А в данном случае, первый операнд && истинный: Boolean(1)===true. Поэтому, возвращается значение второго (число 2).
Число 1 было верным ответом при использовании того же логического оператора || (ИЛИ) вместо &&. То есть, при выражении 0 || 1 || 2 || 3;
При истинности первого операнда, оператор || его сразу возвращает, "не обращая внимания" на второй.
Приоритет этих логических операторов равен, то есть порядок вычисления выражения такой:
((0 || 1) && 2) || 3
, и само вычисление производится так:
0 || 1 && 2 || 3
1 && 2 || 3
2 || 3
2
Похожие вопросы
- Вопрос по JS. Пожалуйста скажите почему код дает 6 пять раз. Почему не 1,2,3,4,5 .Очень запуталась от setTimeout.
- Почему d[0] не изменяется ?
- Получение массива из объектов, которые содержат имя cookie и ее значение
- Помогите избавиться от пустых значений в массиве.
- Подскажите регулярное выражение. В каждом случае нужно выбрать стоимость или диапазон стоимости и время
- Как только с конца массива обрезать все пустые элементы? var arr = [0,,2,,,];
- Когда лучше использовать регулярные выражения в Javascript, а когда не стоит?
- Объясните пошагово, как работает это выражение
- Проверьте 2 кода ((( пожалуйста и ткните носом на ошибку. В общем 1 код работает частично, а второй вообще не работает. JS
- Пожалуйста объясните человеческим языком где и как используется значение undefined и null в JavaScript ?
согласен, но в данном случае это замечание не уместно: в JS это не совсем булевы операторы. Подобное поведение && и || есть и других языках, например в unix shell и Perl.
Это как теория относительности не всем дано понять её!
&& || Это не булевые операторы а условные это большая разница бурливые выглядят так | &
Условия исполняются с лева на право потому в этом примере всё логично до безобразия!
И ещё есть такое понятие как приоритет выполняемых операций который может влиять на последовательность действий к примеру 5+5*5 будет равно 30 а не 50 как многие отвечают :) :)
⚤