试一试
let a = 1;
let b = 0;
a &&= 2;
console.log(a);
// Expected output: 2
b &&= 2;
console.log(b);
// Expected output: 0
语法
js
x &&= y
描述
逻辑与赋值运算符会短路,这意味着 x &&= y 等价于 x && (x = y),不同之处在于表达式 x 只会被评估一次。
由于逻辑与运算符的短路特性,如果左操作数不是真值,则不会执行任何赋值。例如,即使 x 是 const,以下代码也不会抛出错误:
js
const x = 0;
x &&= 2;
以下代码也不会触发 setter
js
const x = {
get value() {
return 0;
},
set value(v) {
console.log("Setter called");
},
};
x.value &&= 2;
事实上,如果 x 不是真值,那么 y 根本不会被评估。
js
const x = 0;
x &&= console.log("y evaluated");
// Logs nothing
示例
使用逻辑与赋值运算符
js
let x = 0;
let y = 1;
x &&= 0; // 0
x &&= 1; // 0
y &&= 1; // 1
y &&= 0; // 0
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-assignment-operators |
浏览器兼容性
加载中…