Оператор нулевого слияния ( ?? ) в JavaScript

В этом руководстве вы узнаете об операторе нулевого слияния( ?? ) в 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.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript