Основные операторы в JS — арифметика, логика и эти странные ?? и ?.
Разбираю js операторы и с арифметикой вроде всё понятно (+ - * /). Но в современном коде постоянно вижу ??, ?. и три точки ... — и не понимаю, что они делают.
Можете коротко разложить основные операторы и особенно объяснить эти новые? А то выглядят как иероглифы.
2 ответа
Давай по группам.
Арифметические:
10 + 3 // 13
10 - 3 // 7
10 * 3 // 30
10 / 3 // 3.333...
10 % 3 // 1 — остаток от деления
10 ** 3 // 1000 — возведение в степень
Логические (&& И, || ИЛИ, ! НЕ):
true && false // false — нужны оба
true || false // true — достаточно одного
!true // false
Теперь современные операторы, которые тебя смущают:
?? — нулевое слияние (nullish coalescing). Возвращает правое значение, только если левое — null или undefined:
const name = userName ?? 'Гость';
Чем отличается от ||? || срабатывает на любое «ложное» значение (0, '', false), а ?? — только на null/undefined. Это важно:
0 || 5 // 5 — ноль посчитался ложным
0 ?? 5 // 0 — ноль остался, он не null/undefined
?. — опциональная цепочка (optional chaining). Безопасно читает вложенные свойства: если по пути встретился null/undefined, вернёт undefined, а не упадёт с ошибкой:
const city = user?.address?.city;
// если user или address нет — city будет undefined, без падения
... — спред / рест. Раскрывает массив или объект:
const arr = [1, 2, 3];
const copy = [...arr, 4]; // [1, 2, 3, 4]
const obj = { a: 1 };
const clone = { ...obj, b: 2 }; // { a: 1, b: 2 }
Комбо ?? + ?. встречается особенно часто: user?.name ?? 'Аноним' — «возьми имя, а если объекта нет или имя пустое — поставь Аноним».
Добавлю про коварство || vs ??, на этом реально часто горят.
Допустим, у тебя счётчик, и валидное значение — 0:
const count = settings.count || 10; // если count === 0, получишь 10! баг
const count = settings.count ?? 10; // 0 останется 0, правильно
Правило простое: если 0, пустая строка или false — это нормальные допустимые значения, бери ??, а не ||.