В этом руководстве вы узнаете об операторе нулевого слияния( ?? ) в JavaScript, который принимает два значения и возвращает второе значение, если первое равно null или undefined.
ES2020 представил нулевой оператор объединения, обозначаемый двойными вопросительными знаками( ?? ). Оператор нулевого слияния — это логический оператор, который принимает два значения:
value1 ?? value2
Нулевой оператор объединения возвращает второе значение( value2 ), если первое значение( value2 ) равно null или undefined. Технически bullish оператор объединения эквивалентен следующему блоку:
const result = value1;
if (result === null || result === undefined) {
result = value2;
}Нулевое значение — это значение, которое либо равно
null, либоundefined.
В следующем примере используется нулевой оператор объединения( ?? ) для возврата строки 'John' поскольку первое значение равно null :
const name = null ?? 'John'; console.log(name); // 'John'
И этот пример возвращает 28, потому что первое значение не undefined :
const age = undefined ?? 28; console.log(age);
Почему используется?
При присвоении переменной значения по умолчанию вы часто используете логический оператор OR( || ). Например:
let count; let result = count || 1 ; console.log(result); // 1
В этом примере переменная count не undefined, она приведена к false. Следовательно, result равен 1.
Однако логический оператор OR( || ) иногда сбивает с толку, если вы считаете 0 или пустые строки '' допустимыми значениями, например:
let count = 0; let result = count || 1;
Результат — 1, а не 0, чего вы можете не ожидать.
Оператор нулевого слияния( ?? ) поможет вам избежать этой ловушки. Он возвращает второе значение только тогда, когда первое имеет значение null или undefined.
Оператор short-circuited
Подобно логическим операторам OR и AND, нулевой оператор объединения ( ?? ) не оценивает второе значение, если первый операнд не является ни undefined, ни null.
Например:
let result = 1 ?? console.log('Hi');В этом примере оператор ?? не оценивает выражение 1/0, потому что первое значение равно 1, которое не равно null и undefined.
В следующем примере вычисляется второе выражение, поскольку первое не undefined :
let result = undefined ?? console.log('Hi');Выход:
'Hi'
Цепочка с оператором AND или OR
SyntaxError произойдет, если вы объедините логический оператор AND или OR напрямую с нулевым оператором ( ?? ) следующим образом:
const result = null || undefined ?? 'OK'; // SyntaxError
Однако вы можете избежать этой ошибки, заключив выражение слева от ?? оператора в круглые скобки, чтобы явно указать приоритеты операторов:
const result =(null || undefined) ?? 'OK'; console.log(result); // 'OK'
Заключение
- Оператор нулевого слияния(
??) — это логический оператор , который принимает два значения и возвращает второе значение , если первое равноnullилиundefined. - Оператор (
??) вычисляет по короткой схеме и не может напрямую комбинироваться с логическими операторами AND или OR.
