空值合并赋值运算符 (??=)
**空值合并赋值 (??=
)** 运算符,也称为 **逻辑空值赋值** 运算符,仅在左侧操作数为 空值 (null
或 undefined
) 时才评估右侧操作数并将其赋值给左侧。
试一试
语法
js
x ??= y
描述
空值合并赋值 短路,这意味着 x ??= y
等效于 x ?? (x = y)
,除了表达式 x
只会被评估一次。
如果左侧不是空值,则不会执行赋值,因为 空值合并 运算符会短路。例如,以下代码不会抛出错误,尽管 x
是 const
js
const x = 1;
x ??= 2;
以下代码也不会触发 setter
js
const x = {
get value() {
return 1;
},
set value(v) {
console.log("Setter called");
},
};
x.value ??= 2;
事实上,如果 x
不是空值,则根本不会评估 y
。
js
const x = 1;
x ??= console.log("y evaluated");
// Logs nothing
示例
使用空值合并赋值
可以使用空值合并赋值运算符为对象属性应用默认值。与使用解构和 默认值 相比,??=
还会在属性值为 null
时应用默认值。
js
function config(options) {
options.duration ??= 100;
options.speed ??= 25;
return options;
}
config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }
规范
规范 |
---|
ECMAScript 语言规范 # sec-assignment-operators |
浏览器兼容性
BCD 表格仅在浏览器中加载