逻辑或赋值运算符 (||=)

**逻辑或赋值 (||=)** 运算符仅评估右操作数,并在左操作数为假值时将其赋值给左操作数。

试一试

语法

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

示例

设置默认内容

如果“lyrics”元素为空,则显示默认值

js
document.getElementById("lyrics").textContent ||= "No lyrics.";

这里的短路特别有用,因为元素不会被不必要地更新,并且不会导致不希望的副作用,例如额外的解析或渲染工作,或失去焦点等。

注意:请注意您正在检查的API返回的值。如果返回空字符串(假值),则必须使用||=,以便显示“No lyrics.”而不是空格。但是,如果API在内容为空的情况下返回nullundefined,则应改用??=

规范

规范
ECMAScript语言规范
# sec-assignment-operators

浏览器兼容性

BCD表格仅在启用JavaScript的浏览器中加载。

另请参阅