Приоритет операторов

Приоритет операторов

Технический фундамент порядка вычисления

Приоритет операторов определяет математическую и логическую корректность выражений:

  • одинаковые операторы без скобок могут интерпретироваться не так, как ожидается;
  • смесь &&/|| и арифметики требует явного порядка;
  • скобки — инструмент инженерной ясности, а не «лишний шум»;
  • сложные формулы лучше разбивать на промежуточные вычисления.

Явный порядок вычисления снижает системные ошибки в бизнес-расчетах.

Почему приоритет операторов влияет на результат

Когда в одном выражении несколько операторов, 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, а системная логическая ошибка.

Краткий итог

  • Приоритет операторов определяет порядок вычисления выражения.
  • Скобки - самый надежный способ явно задать нужный порядок.
  • В условиях сочетание && и || особенно чувствительно к приоритету.
  • Разбиение сложных выражений на шаги повышает читаемость и снижает риск багов.
  • Если результат кажется странным, первым делом проверяй приоритет и ассоциативность операторов.