逻辑与赋值(&&=)

逻辑与赋值x &&= y)运算仅在 x值时为其赋值。

尝试一下

语法

js
expr1 &&= expr2

描述

逻辑与的短路运算意味着 x &&= y 与下式等价:

js
x && (x = y);

如果左操作数不为真值,则由于逻辑与运算符的短路运算,不进行赋值操作。例如,由于 xconst(常量),以下式子不会抛出错误:

js
const x = 0;
x &&= 2;

也不会触发 setter 函数:

js
const x = {
  get value() {
    return 0;
  },
  set value(v) {
    console.log("调用了 setter");
  },
};
x.value &&= 2;

实际上,如果 x 不为真值,则根本不会对 y 求值。

js
const x = 0;
x &&= console.log("y 进行了求值");
// 什么都不会输出

示例

使用逻辑与赋值

js
let x = 0;
let y = 1;

x &&= 0; // 0
x &&= 1; // 0
y &&= 1; // 1
y &&= 0; // 0

规范

Specification
ECMAScript Language Specification
# sec-assignment-operators

浏览器兼容性

BCD tables only load in the browser

参见