Значения по умолчанию с оператором нулевого слияния
??
) предоставляет простой способ обработки null
или undefined
значений в JavaScript. Он просто необходим, и я расскажу, почему.Один из важных элементов синтаксиса JavaScript, который я с удовольствием использую, — это оператор нулевого слияния (??
). Оператор ??
обрабатывает значения по умолчанию более эффективно по сравнению с традиционным подходом, использующим логический оператор ИЛИ (||
). Это 100-процентно необходимый приём.
Оба оператора ??
и ||
возвращают правый операнд, если левый операнд является «ложным». Но ключевое различие заключается в том, что считать «ложным»…
Разница между ||
и ??
Оператор логического ИЛИ (||
) рассматривает false
, 0
, NaN
, ""
(пустую строку), null
и undefined
как ложные. Поэтому, если встретится любое из них, будет возвращена правая часть выражения ||
. Это происходит и тогда, когда значение типа 0
или ""
может быть валидным и предназначенным для использования:
const value = 0;
const _default = 5;
console.log(value || _default); // Результат: 5 (потому что 0 ложное значение)
Здесь ||
оценивает 0
как ложное значение, поэтому по умолчанию возвращается значение 5
.
Однако оператор нулевого слияния (??
) считает ложными только null
и undefined
. Любое другое значение, даже если оно является ложным в логическом контексте (например, 0
, false
или пустая строка), не приведёт к значению по умолчанию:
const value = 0;
const _default = 5;
console.log(value ?? _default); // Результат: 0 (потому что 0 не является null или undefined)
Оператор ??
рассматривает 0
как допустимое значение, поэтому он не заменяет его значением по умолчанию.
Почему ??
безопаснее для значений по умолчанию
JavaScript оператор нулевого слияния — мощный инструмент, отлично подходящий для ситуаций, когда необходимо сохранить ложные значения, такие как 0
, false
или пустая строка, но при этом предоставить значения по умолчанию для null
или undefined
. Это различие помогает предотвратить непредвиденные эффекты, возникающие при использовании ||
, особенно при работе с числами или пустыми строками.
Используя ??
, можно избежать неожиданных результатов и написать более предсказуемый, надёжный JavaScript код, точно обрабатывающий значения по умолчанию.
Ключевые преимущества:
- Точно различает "отсутствие значения" и "ложное значение"
- Защищает от нежелательных подстановок
- Делает код более выразительным