Присваивание с использованием оператора нулевого слияния (??=)
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна во всех браузерах с сентября 2020 года.
Оператор присваивания с использованием оператора нулевого слияния (??=), также известный как оператор логического присваивания при нулевом значении, вычисляет правый операнд и присваивает его левому только в том случае, если левый операнд имеет нулевое значение (null или undefined).
Попробуйте
const a = { duration: 50 };
a.speed ??= 25;
console.log(a.speed);
// Expected output: 25
a.duration ??= 10;
console.log(a.duration);
// Expected output: 50
Синтаксис
x ??= y
Описание
Присваивание с использованием оператора нулевого слияния кратковременно срабатывает (short-circuits), что означает, что x ??= y эквивалентно x ?? (x = y), за исключением того, что выражение x вычисляется только один раз.
Присваивание не выполняется, если левая часть не является нулевой, из-за кратковременного срабатывания оператора нулевого слияния. Например, следующее не вызовет ошибку, несмотря на то, что x является const:
const x = 1; x ??= 2;
Аналогично, следующее не вызовет сеттер:
const x = {
get value() {
return 1;
},
set value(v) {
console.log("Setter called");
},
};
x.value ??= 2;
На самом деле, если x не является нулевым, y вообще не вычисляется.
const x = 1;
x ??= console.log("y evaluated");
// Logs nothing
Примеры
Использование присваивания с оператором нулевого слияния
Вы можете использовать оператор присваивания с нулевым слиянием для применения значений по умолчанию к свойствам объектов. По сравнению с использованием деструктуризации и значений по умолчанию, ??= также применяет значение по умолчанию, если свойство имеет значение null.
function config(options) {
options.duration ??= 100;
options.speed ??= 25;
return options;
}
config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
nullish_coalescing_assignment |
85 |
85 |
79 |
71 |
14 |
85 |
79 |
60 |
14 |
14.0 |
85 |
14 |
1.0.0 |
1.2 |
15.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_assignment