@mikitachyzhyk

Приоритет выполнения операндов и операторов. Почему так происходит?

При выполнение данного кода, первым выводится сообщение 1, затем 2, а 3 вообще не выводится.

alert(1) || alert(2) && alert(3)

Например в данном случае будет выводиться 1, 2, затем 3. Т.е. не смотря на приоритет операторов, сначала выполняются вычисления над операндами слева направо, затем уже идут вычисления.

function myalert(value) {
	alert(value);
	return value;
}

myalert(1) + myalert(2) * myalert(3)


В первом случае же так не происходит, почему?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Разница в примерах – в возвращаемом значении:
  • alert(value) возвращает undefined
  • myalert(value) возвращает value


Выражение A || B && C разбирается как A || (B && C)

Сначала оценивается A. Если оно приводится к false, требуется проверить второй аргумент ||, т.е. (B && C)
Сначала проверяется B. Если оно приводится к false, то проверять C уже не нужно.
Ответ написан
rockon404
@rockon404
Frontend Developer
Алгоритм:
1. Вызываем первый alert
2. Получаем undefined
3. Вызываем второй операнд в II
4. Получаем undefined и поэтому возвращаем его не проверяя второй операнд в &&

undefined || undefined && 'до этого места проверка не доходит'


undefined || 'что угодно' // 'что угодно'
undefined && 'что угодно' // undefined

Помимо undefined, подобное справедливо для всего, что кастуется в false.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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