Для чего используется оператор `??` (nullish coalescing)?
Оператор ??, известный как оператор нулевого слияния (nullish coalescing operator), был введен в ECMAScript 2020 и служит для упрощения работы с значениями, которые могут быть либо null, либо undefined. Этот оператор позволяет задать значение по умолчанию для таких случаев, что делает код более чистым и понятным.
Основные характеристики оператора ??:
- Сравнение с логическим оператором
||:- Оператор
??возвращает правый операнд только если левый операнд равенnullилиundefined. - Логический оператор
||возвращает правый операнд, если левый операнд является ложным значением, что включает в себя0,NaN,""(пустую строку) иfalse.
- Оператор
Пример использования оператора ??:
const user = {
name: 'Alice',
age: null
};
// Использование оператора ?? для установки значения по умолчанию
const userAge = user.age ?? 18; // вернет 18, так как user.age равно null
console.log(userAge); // 18
В этом примере, если user.age не задано (т.е. равно null или undefined), будет возвращено значение 18.
Пример использования логического оператора ||:
const user = {
name: 'Alice',
age: 0
};
// Использование логического оператора ||
const userAge = user.age || 18; // вернет 18, так как 0 является ложным значением
console.log(userAge); // 18
В этом случае, user.age равно 0, и результатом будет 18, что может привести к непредвиденным последствиям, если 0 является допустимым значением.
Когда использовать оператор ??:
- Когда необходимо четко обрабатывать случаи, когда значение отсутствует (
nullилиundefined), не затрагивая другие ложные значения, такие как0,""илиfalse. - Когда нужно упростить код и сделать его более читаемым, избегая дополнительных проверок.
Распространенные ошибки:
-
Неправильное понимание поведения:
- Не путайте
??и||. Использование||может привести к неожиданным результатам при работе с другими ложными значениями, такими как0или пустая строка.
- Не путайте
-
Использование с выражениями:
- Оператор
??имеет низкий приоритет, что может привести к ошибкам, если не использовать скобки. Например:
const value = 5 + (null ?? 10); // вернет 15 - Оператор
-
Не использовать с другими типами:
- Оператор
??не предназначен для проверки типов. Если необходимо проверить, является ли переменная не толькоnullилиundefined, но и имеет другое значение, используйте другие методы проверки.
- Оператор
Практические советы:
- Всегда проверяйте, какие значения вы ожидаете получить. Если ожидаете, что переменная может принимать значения, отличные от
nullиundefined, используйте??для безопасного задания значений по умолчанию. - Не забывайте о читаемости кода. Использование оператора
??может существенно упростить код, избавляя от избыточных конструкций проверки. - Будьте внимательны при сочетании
??с другими операторами. Всегда проверяйте порядок выполнения операций.
Оператор нулевого слияния — это мощный инструмент в вашем арсенале JavaScript, который, при правильном использовании, может значительно улучшить качество и читаемость вашего кода.