Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по приоритетам!? (https://javascript.ru/forum/misc/76554-vopros-po-prioritetam.html)

AlexanderFilatov 22.01.2019 09:44

Вопрос по приоритетам!?
 
Привет всем!Помогите разобраться в работе приоритетов!Вот конкретный пример:
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


Просьба прокомментировать самым строгим образом, если что не так!Спасибо!

SuperZen 22.01.2019 13:04

(2 && 10 * 10 > 50) - здесь подразумевается, если "два" (должно быть не 0 или "" и тд %)), то тогда выполнить второе условие, которое возвращает тру. Потом срабатывает первое условие 1+1 = 2, и 2 == тру... короче шортхэнд, если есть что-то, то выполнить что-то...

j0hnik 22.01.2019 18:19

Пошагово
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);

j0hnik 22.01.2019 18:35

AlexanderFilatov,
правая часть от && будет выполняться только в случае если левая вернет true

AlexanderFilatov 23.01.2019 08:09

Цитата:

Сообщение от j0hnik
правая часть от && будет выполняться только в случае если левая вернет true

Спасибо вам большое!Я понял!Здесь оператор && использует короткий цикл вычисления, который вычисляет операнды слева направо до первого ложного, а если все истинные, то последнее значение!Поэтому так как левая часть тут равна true, то запустится вычисление второго аргумента, которое тоже равно true!Оно и вернется!
Как например:
var x;
true && (x = 1);
alert(x); // 1

А если первый аргумент false, то вычисление второго аргумента не произойдет:
var x;
false && (x = 1);
alert(x); // undefined

Смутило пояснение автора данной книги: "У || приоритет ниже всех, потом идет &&, потом операторы сравнения, потом все остальное!"
Получается интерпретатор анализирую выражение с оператором && и ||
начинает вычисление с левого аргумента.

AlexanderFilatov 23.01.2019 08:34

Еще пример:
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, время: 15:03.