Выбор ответа Junior Современный синтаксис спрашивают часто обновлено

Громкость 0 превращается в 50

Вопрос

Пользователь выставил громкость 0, а приложение ставит 50. Какая замена строки исправит баг?

const volume = settings.volume || 50;

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: const volume = settings.volume ?? 50;. подставляет правую часть для любого ложного значения, а 0 ложный. ?? подставляет её только для null и undefined, поэтому 0 сохранится. && вернёт 0 для нуля, но 50 для любой ненулевой громкости, это сломает всё остальное. ?. защищает от…

Варианты ответа

  1. const volume = settings.volume && 50;
  2. const volume = settings.volume ?? 50;правильный ответ
  3. const volume = settings?.volume || 50;
  4. const volume = !!settings.volume || 50;

Разбор

|| подставляет правую часть для любого ложного значения, а 0 ложный. ?? подставляет её только для null и undefined, поэтому 0 сохранится. && вернёт 0 для нуля, но 50 для любой ненулевой громкости, это сломает всё остальное. ?. защищает от отсутствия settings, но || по-прежнему съест ноль. !! превращает значение в булево, и громкость станет true или 50.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме