В этом руководстве вы узнаете об операторе нулевого слияния( ??
) в 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.