Что означает двойной знак вопроса "??" в выражении?
Не могли бы Вы объяснить вот эту строку: return this.url.searchParams.get(key) ?? defaultValue;
Дополню:
- Оператор
??
— это nullish coalescent. Он отдает правое от себя значение, если слева от него Nullish value (то естьNull
илиundefined
) - Есть ещё оператор
||
— это логическое ИЛИ. Он отдает правое от себя значение, если слева от него Falsy value (то естьNull
,undefined
,false
,0
,NaN
или пустая строка)
Двойной знак вопроса позволяет задать другое значение, если выражение слева от знаков ??
ложное. Например:
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
.