Опциональная цепочка и нулевое слияние
Вопрос
Что делают ?. и ?? и чем ?? отличается от ||?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
?. прерывает цепочку и даёт undefined, если слева null или undefined
?. работает и для вызова, и для индекса
?? подставляет запасное значение только для null и undefined
|| подставляет для любого ложного: 0, пустая строка, false
смешивать ?? и || без скобок нельзя - синтаксическая ошибка
Что могут спросить следом
- Где ?. вредит и маскирует настоящую ошибку
- Что такое ??= и когда пригодится
- Чем ?. отличается от проверки if (a && a.b)
Разбор
a?.b возвращает undefined, если a - null или undefined, вместо падения.
Работает и на вызове fn?.(), и на индексе arr?.[0]. Важно: цепочка обрывается целиком,
остаток не вычисляется.
?? отличается от || тем, что срабатывает только на null/undefined.
count || 10 подставит 10 для нуля, а count ?? 10 - нет. Для чисел, пустых строк
и false это принципиально: типичный баг - page || 1 стирает нулевую страницу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.