Вопрос по приоритетам!?
Привет всем!Помогите разобраться в работе приоритетов!Вот конкретный пример:
alert(1 + 1 == 2 && true); //true Моя логика рассуждений как работает это выражение: 1.Вначале интерпретатор вычисляет сложение получается: 2 == 2 && true 2. Потом сравнение 2 == 2 получается: true && true 3. В итоге оператор && возвращает последнее истинное значение.Я понял так!Еще пример(он взят из книги Выразительный JavaScript): alert(1 + 1 == 2 && 10 * 10 > 50); // true Здесь(как я думаю исходя из таблицы приоритетов)js вычисляет его следующим образом: 1. Сначала умножение(14), получаем: 1 + 1 == 2 && 100 > 50 2. Затем сложение(13): 2 == 2 && 100 > 50 3. Далее "больше"(11): 2 == 2 && true 4. Потом "равно"(10): true && true Получаем true. Изначально я думал, что при сравнение происходит вычисление левого и правого выражения!Но так будет, только если заключить хотя бы одно выражение в скобки: alert(1 + 1 == (2 && 10 * 10 > 50)); // 2 == true => 2 == 1 => false Просьба прокомментировать самым строгим образом, если что не так!Спасибо! |
(2 && 10 * 10 > 50) - здесь подразумевается, если "два" (должно быть не 0 или "" и тд %)), то тогда выполнить второе условие, которое возвращает тру. Потом срабатывает первое условие 1+1 = 2, и 2 == тру... короче шортхэнд, если есть что-то, то выполнить что-то...
|
Пошагово
alert(1 + 1 == 2 && 10 * 10 > 50); alert( 2 == 2 && 10 * 10 > 50); alert(true && 10 * 10 > 50); alert(true && 100 > 50); alert(true && true); alert(true); |
AlexanderFilatov,
правая часть от && будет выполняться только в случае если левая вернет true |
Цитата:
Как например: var x; true && (x = 1); alert(x); // 1 А если первый аргумент false, то вычисление второго аргумента не произойдет: var x; false && (x = 1); alert(x); // undefined Смутило пояснение автора данной книги: "У || приоритет ниже всех, потом идет &&, потом операторы сравнения, потом все остальное!" Получается интерпретатор анализирую выражение с оператором && и || начинает вычисление с левого аргумента. |
Еще пример:
alert(1 + 1 == 2 == 10 * 10 > 50); // true Пошагово: 2 == 2 == 10 * 10 > 50 true == 10 * 10 > 50 true == 100 > 50 true == true true Я так это понял! |
Часовой пояс GMT +3, время: 04:31. |