Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2019, 09:44
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Вопрос по приоритетам!?
Привет всем!Помогите разобраться в работе приоритетов!Вот конкретный пример:
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 (permalink)  
Старый 22.01.2019, 13:04
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

(2 && 10 * 10 > 50) - здесь подразумевается, если "два" (должно быть не 0 или "" и тд %)), то тогда выполнить второе условие, которое возвращает тру. Потом срабатывает первое условие 1+1 = 2, и 2 == тру... короче шортхэнд, если есть что-то, то выполнить что-то...
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2019, 18:19
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Пошагово
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);
Ответить с цитированием
  #4 (permalink)  
Старый 22.01.2019, 18:35
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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

Последний раз редактировалось j0hnik, 22.01.2019 в 18:38.
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2019, 08:09
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

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

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

Смутило пояснение автора данной книги: "У || приоритет ниже всех, потом идет &&, потом операторы сравнения, потом все остальное!"
Получается интерпретатор анализирую выражение с оператором && и ||
начинает вычисление с левого аргумента.
Ответить с цитированием
  #6 (permalink)  
Старый 23.01.2019, 08:34
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Еще пример:
alert(1 + 1 == 2 == 10 * 10 > 50); // true

Пошагово:
2 == 2 == 10 * 10 > 50
true == 10 * 10 > 50
true == 100 > 50
true == true
true
Я так это понял!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 04:29
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 11:54
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21