空值合并赋值运算符 (??=)

**空值合并赋值 (??=)** 运算符,也称为 **逻辑空值赋值** 运算符,仅在左侧操作数为 空值 (nullundefined) 时才评估右侧操作数并将其赋值给左侧。

试一试

语法

js
x ??= y

描述

空值合并赋值 短路,这意味着 x ??= y 等效于 x ?? (x = y),除了表达式 x 只会被评估一次。

如果左侧不是空值,则不会执行赋值,因为 空值合并 运算符会短路。例如,以下代码不会抛出错误,尽管 xconst

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 表格仅在浏览器中加载

另请参阅