Приоритет операторов
Приоритет операторов
Технический фундамент порядка вычисления
Приоритет операторов определяет математическую и логическую корректность выражений:
- одинаковые операторы без скобок могут интерпретироваться не так, как ожидается;
- смесь
&&/||и арифметики требует явного порядка; - скобки — инструмент инженерной ясности, а не «лишний шум»;
- сложные формулы лучше разбивать на промежуточные вычисления.
Явный порядок вычисления снижает системные ошибки в бизнес-расчетах.
Почему приоритет операторов влияет на результат
Когда в одном выражении несколько операторов, JavaScript должен решить, что считать раньше. Это называется приоритетом операторов. Если его не учитывать, код может выглядеть "правильно", но выдавать неверный результат.
Ключевой момент: порядок вычисления определяет смысл выражения так же сильно, как сами операторы.
Проверь себя: почему 2 + 3 * 4 не равно (2 + 3) * 4?
Базовая логика приоритета
Простой ориентир:
- скобки имеют высший приоритет;
- затем унарные операторы;
- потом арифметика (
*,/,%выше+,-); - затем сравнения;
- затем логические операторы;
- присваивание обычно выполняется позже.
console.log(2 + 3 * 4); // 14
console.log((2 + 3) * 4); // 20
Смотри, что важно: скобки не просто "для красоты", они делают намерение явным.
Приоритет в условиях
const isAuth = true;
const isVerified = false;
const isAdmin = true;
const canOpen = isAuth && isVerified || isAdmin;
console.log(canOpen); // true
Здесь && выполнится раньше ||, поэтому выражение читается как:
(isAuth && isVerified) || isAdmin
Если бизнес-правило другое, нужны скобки.
const canOpenStrict = isAuth && (isVerified || isAdmin);
Проверь себя: как изменится результат, если isAuth = false?
Мини-сценарий: расчет скидки
const price = 1000;
const discount = 10;
const tax = 20;
const total = price - (price * discount) / 100 + (price * tax) / 100;
Без скобок и ясного порядка такая формула быстро становится источником ошибок.
Анти-провал: сложные вычисления разбивай на промежуточные шаги.
const discountValue = (price * discount) / 100;
const taxValue = (price * tax) / 100;
const totalSafe = price - discountValue + taxValue;
Ассоциативность операторов
Если приоритет одинаковый, важно направление вычисления (слева направо или справа налево).
console.log(10 - 3 - 2); // 5 (слева направо)
Здесь часто путаются: ожидают 10 - (3 - 2), но реально (10 - 3) - 2.
Еще один пример: возведение в степень ** ассоциативно справа налево.
console.log(2 ** 3 ** 2); // 512 (2 ** (3 ** 2))
console.log((2 ** 3) ** 2); // 64
Частые ошибки новичков
- Полагаться на "интуитивный" порядок без проверки.
- Не использовать скобки в сложных выражениях.
- Смешивать много операторов в одну строку.
- Игнорировать влияние
&&и||на итог условия.
Проверь себя: почему выражение с тремя разными операторами лучше разбивать на этапы?
Что будет, если изменить входные данные
Даже при корректных входах неправильный приоритет меняет результат. Например, в формуле цены ошибка в порядке операций даст неверную сумму для каждого заказа. Это не edge-case, а системная логическая ошибка.
Краткий итог
- Приоритет операторов определяет порядок вычисления выражения.
- Скобки - самый надежный способ явно задать нужный порядок.
- В условиях сочетание
&&и||особенно чувствительно к приоритету. - Разбиение сложных выражений на шаги повышает читаемость и снижает риск багов.
- Если результат кажется странным, первым делом проверяй приоритет и ассоциативность операторов.