Операторы в 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.??и?.закрывают частые кейсы «значение по умолчанию» и «безопасный доступ».- Скобки снимают двусмысленность приоритета.