← Все вопросы

Основные операторы в JS — арифметика, логика и эти странные ?? и ?.

Задан 16 месяцев назад882 просмотров2 ответа
5

Разбираю js операторы и с арифметикой вроде всё понятно (+ - * /). Но в современном коде постоянно вижу ??, ?. и три точки ... — и не понимаю, что они делают.

Можете коротко разложить основные операторы и особенно объяснить эти новые? А то выглядят как иероглифы.

2 ответа

11
✓ Принятый ответ — помог автору

Давай по группам.

Арифметические:

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 ?? 'Аноним' — «возьми имя, а если объекта нет или имя пустое — поставь Аноним».

4

Добавлю про коварство || vs ??, на этом реально часто горят.

Допустим, у тебя счётчик, и валидное значение — 0:

const count = settings.count || 10;  // если count === 0, получишь 10! баг
const count = settings.count ?? 10;  // 0 останется 0, правильно

Правило простое: если 0, пустая строка или false — это нормальные допустимые значения, бери ??, а не ||.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект