Что такое null-коалесцентный оператор ?? в JavaScript
- 15 октября 2025
Операторы ?? и ??= стали доступны в Baseline в статусе «Widely Available» с 16 марта 2023 года. Они упрощают работу с переменными, которые могут быть null или undefined, позволяя задавать значения по умолчанию или обновлять переменные только в этих случаях. Это делает код чище и понятнее, особенно при работе с потенциально отсутствующими данными.
В этой статье мы разберём, как работают операторы нулевого слияния, и покажем примеры их использования.
Как работает оператор ??
Оператор нулевого слияния ?? возвращает значение справа, если значение слева равно null или undefined. В отличие от логического оператора ||, который считает ложными любые falsy-значения (например, 0, '', false), ?? проверяет только null и undefined. Это делает его более точным для задания значений по умолчанию.
Пример:
let value = null;
console.log(value ?? 'По умолчанию'); // По умолчанию
value = 0;
console.log(value ?? 'По умолчанию'); // 0 (в отличие от ||, который вернул бы 'По умолчанию')
Как работает оператор ??=
Оператор присваивания нулевого слияния ??= присваивает значение справа переменной слева, только если левая переменная равна null или undefined. Это удобно для инициализации переменных значениями по умолчанию без лишних проверок.
Пример:
let name;
name ??= 'Гость';
console.log(name); // Гость
let age = 25;
age ??= 18;
console.log(age); // 25, так как age уже определён
Пример 1: Задание значений по умолчанию
Оператор ?? часто используется для предоставления дефолтных значений в ситуациях, когда данные могут отсутствовать, например, при работе с API или пользовательскими настройками.
const userSettings = {
theme: null,
fontSize: 16
};
const theme = userSettings.theme ?? 'light';
const fontSize = userSettings.fontSize ?? 14;
console.log(theme); // light
console.log(fontSize); // 16
Здесь theme получает значение по умолчанию 'light', так как исходное значение — null, а fontSize остаётся 16, так как оно уже определено.
Пример 2: Обновление переменных с ??=
Оператор ??= полезен для обновления переменных только в случае, если они ещё не инициализированы. Это удобно для настройки параметров по умолчанию в функциях или объектах.
let config = {};
config.timeout ??= 5000;
config.retries ??= 3;
console.log(config); // { timeout: 5000, retries: 3 }
В этом примере объект config получает значения по умолчанию только для тех свойств, которые ещё не определены.
Пример 3: Сравнение с ||
Чтобы понять разницу между ?? и ||, рассмотрим следующий пример:
let score = 0;
console.log(score || 100); // 100, так как 0 считается falsy
console.log(score ?? 100); // 0, так как 0 не является null или undefined
Оператор || возвращает значение справа для всех falsy-значений, тогда как ?? делает это только для null и undefined. Это делает ?? более предсказуемым в ситуациях, где falsy-значения, такие как 0 или пустая строка, являются допустимыми.
Пример 4: Интеграция в интерфейс
Операторы ?? и ??= можно использовать для отображения данных в интерфейсе, избегая лишних проверок. Например, показываем имя пользователя или «Гость» в заголовке:
<style>
.header {
font-family: Arial, sans-serif;
padding: 10px;
}
</style>
<script>
function displayUserName(user) {
const name = user?.name ?? 'Гость';
document.write('<h2 class="header">Привет, ' + name + '!</h2>');
}
const user = { name: null };
displayUserName(user); // Привет, Гость!
Здесь ?? гарантирует, что если user.name равно null или undefined, будет отображён «Гость».
Совместимость и ограничения
На октябрь 2025 года операторы ?? и ??= поддерживаются во всех современных браузерах (Chrome, Firefox, Edge, Safari) и в Node.js (с версии 14). Проверить актуальную поддержку можно на Can I Use. Единственное ограничение — эти операторы не заменяют полные проверки на falsy-значения, если они необходимы в логике приложения.
Операторы ?? и ??= — это удобные инструменты для работы с null и undefined в JavaScript. Они делают код короче, понятнее и безопаснее, особенно при задании значений по умолчанию или обновлении переменных. Используйте их вместо ||, когда нужно учитывать только «нулевые» значения, и экспериментируйте с примерами выше, чтобы интегрировать их в свои проекты!
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.