逻辑空赋值 (??=)

翻译不完整。 请帮助我们翻译这篇文章!

逻辑空赋值运算符 (x ??= y) 仅在 x 是 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 }

规范

规范
Logical Assignment Operators
Assignment operators

浏览器兼容性

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Logical nullish assignment (x ??= y)Chrome Full support 85Edge Full support 85Firefox Full support 79IE No support NoOpera No support NoSafari Full support 14WebView Android Full support 85Chrome Android Full support 85Firefox Android Full support 79Opera Android No support NoSafari iOS Full support 14Samsung Internet Android No support Nonodejs No support No

Legend

Full support  
Full support
No support  
No support

相关链接