Операторы в JavaScript

Операторы в JavaScript #

Оператор комбинирует значения (операнды) и даёт новый результат или меняет переменную. Ниже — базовый набор, достаточный для условий, циклов и повседневных вычислений.


Арифметика и присваивание #

const base = 1200
const fee = 90

const gross = base + fee // 1290
const net = gross - 200 // 1090
const parts = net / 2 // 545
const rem = 17 % 5 // 2
const squared = 3 ** 2 // 9

Сокращённое присваивание обновляет ту же переменную:

let stock = 40
stock += 5 // 45
stock *= 2 // 90
stock--" // 89, затем выражение даёт 89 (постфикс)

Инкремент ++ / декремент -- меняют число на месте. В сложных выражениях поведение префикса и постфикса различается — в учебном коде чаще пишите stock += 1.


Сравнение #

Операторы сравнения возвращают boolean.

5 > 3 // true
5 <= 5 // true
'а' < 'б' // true — сравнение строк по коду символов

Всегда предпочитайте === / !== строгому равенству без приведения типов:

0 == false // true  — неявное приведение
0 === false // false — разные типы

'10' == 10 // true
'10' === 10 // false

Object.is(a, b) учитывает нюансы вроде NaN и -0, но в обычном коде хватает ===.


Логические операторы #

ОператорСмысл (упрощённо)
&&И: вернуть первое ложное или последнее значение
||Или: вернуть первое истинное или последнее
!Отрицание
const hasSession = true
const isBanned = false

hasSession && !isBanned // true

const title = '' || 'Без названия' // "Без названия"
const rawPort = ''
const port = rawPort && Number(rawPort) // '' — falsy, port = ''

В условиях важна truthiness: 0, '', null, undefined, NaN, false — ложные; остальное — истинные.

if (items.length && user) {
  // массив не пуст и user задан
}

Нулевое слияние: ?? и ??= #

?? выбирает правый операнд, только если слева null или undefined (не пустая строка и не 0):

const savedPage = 0
const page = savedPage ?? 1 // 0 — ноль сохранён

const missing = null
const fallback = missing ?? 1 // 1

|| здесь повёл бы себя иначе: 0 || 1 → 1.

let theme
theme ??= 'ocean' // присвоить, только если theme null/undefined

Опциональная цепочка: ?. #

Безопасный доступ к вложенным полям без ручных проверок:

const payload = {
  user: {
    profile: { city: 'Казань' },
  },
}

payload.user?.profile?.city // "Казань"
payload.user?.settings?.theme // undefined — без TypeError

payload.list?.find((item) => item.id === 7) // undefined, если list нет

?.() вызывает функцию, только если слева не null/undefined:

const logger = null
logger?.warn('skip') // ничего не произойдёт

Приоритет и скобки #

У операторов разный приоритет (например, * выше +, && выше ||). Если сомневаетесь — ставьте скобки: читаемость важнее «красивой» краткости.

const ok = (role === 'editor' || role === 'admin') && isActive

Полная таблица приоритетов есть в спецификации и справочниках; для курса запомните: арифметика → сравнение → && / || / ?? → присваивание, и всегда уточняйте скобками спорные места.


Итог #

  • Считайте и сравнивайте через +, -, *, /, ===, !==.
  • &&, ||, ! работают с truthy/falsy-значениями, не только с true/false.
  • ?? и ?. закрывают частые кейсы «значение по умолчанию» и «безопасный доступ».
  • Скобки снимают двусмысленность приоритета.

См. также #

Часто спрашивают

Чем let отличается от const?
Оба блочные. let допускает повторное присваивание, const — нет (содержимое объекта при этом можно менять). Подробнее
Зачем нужен use strict?
Строгий режим ловит случайные глобалы и делает this у «голых» вызовов равным undefined; в ES-модулях он включён по умолчанию. Подробнее
Почему лучше писать ===, а не ==?
=== не приводит типы молча; == запускает сложные правила приведения и чаще даёт неожиданный результат. Подробнее