Что означает двойной знак вопроса "??" в выражении?

Не могли бы Вы объяснить вот эту строку: return this.url.searchParams.get(key) ?? defaultValue;

Ответы
Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
06 июля 2022

Двойной знак вопроса позволяет задать другое значение, если выражение слева от знаков ?? ложное. Например:

const user = { name: 'Ivan' };
const age = user.age ?? 23;
console.log(age); // => 23

Переменная age равна 23, потому что в объекте user нет ключа age. Выражение слева от знаков ?? ложное, поэтому выполняется выражение справа от знаков и результат выражения присваивается в переменную. Если выражение слева вернёт истинное выражение, то справа выражение выполняться не будет:

const user = { name: 'Ivan', age: 39 };

const getDefaultAge = () => {
  console.log('get default age');
  return 23;
};

const age = user.age ?? getDefaultAge();
console.log(age); // => 39

Ключ age в объекте есть, поэтому выражение справа от ?? не выполнилось, функция getDefault() не вызывалась, а в переменную age присвоился результат выражения user.age.

Аватар пользователя Dimanvaz Sungatullin
Dimanvaz Sungatullin
12 сентября 2022

Дополню:

Оператор ?? это nullish coalescent, он отдаёт правое от себя значение, если слева он него "Nullish" value (то есть Null или undefined).

Есть ещё || это логическое ИЛИ, он отдаёт правое от себя значение, если слева он него "Falsy" value (то есть Null, undefined, false, 0, NaN, пустая строка).

Добавьте ваш ответ

Рекомендуемые курсы

состояние
JSX
компоненты
производительность
26 часов
Посмотреть
утверждения
jest
матчеры
юнит-тесты
14 часов
Посмотреть
промисы
event loop
обработка ошибок
таймеры
18 часов
Посмотреть