--- title: 逻辑空赋值 (??=) slug: Web/JavaScript/Reference/Operators/Logical_nullish_assignment translation_of: Web/JavaScript/Reference/Operators/Logical_nullish_assignment ---
逻辑空赋值运算符 (x ??= y
) 仅在 x
是 {{Glossary("nullish")}} (null
或 undefined
) 时对其赋值。
expr1 ??= expr2
空值合并运算符从左至右求值,其使用以下规则测试是否可能进行语法短路求值:
(结果非 null 或 undefined 的表达式) ?? expr
被短路求值为左侧表达式,当左侧证明为既非 null
也非 undefined
.
语法短路意味着 expr
部分尚未被求值,因此任何与其求值产生的相关副作用都不会生效(例如,如果 expr
是一个函数调用,则该调用将不会发生)。
逻辑空赋值的语法短路也意味着 x ??= y
等价于:
x ?? (x = y);
而不等价于如下的表达式,因为其一定会发生赋值:
x = x ?? y;
function config(options) { options.duration ??= 100; options.speed ??= 25; return options; } config({ duration: 125 }); // { duration: 125, speed: 25 } config({}); // { duration: 100, speed: 25 }
规范 |
---|
{{SpecName('Logical Assignment', '#sec-assignment-operators', 'Assignment operators')}} |
{{Compat("javascript.operators.logical_nullish_assignment")}}
??
)