我们在 JavaScript 中有更简单的三元运算符吗?

ish*_*mal 1 javascript php operators

我刚刚在 PHP 中看到了这个语法:

// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
Run Code Online (Sandbox Code Playgroud)

为什么我们在 JavaScript 中没有相同的内容?

我厌倦了这样做:

var name = obj['name'] ? obj['name'] : 'GOD';
Run Code Online (Sandbox Code Playgroud)

axi*_*iac 5

空合并运算符是最近除了PHP。它是在 PHP 7(2015 年 12 月发布)中引入的,距该功能首次提出已超过 10 年。

在 Javascript 中,逻辑 OR运算符可以用于此目的多年(因为 Javascript 是创建的?!)。

正如文档解释的那样:

逻辑或 ( ||)

expr1 || expr2

expr1如果可以转换为true,则返回;否则,返回expr2
因此,利用布尔值使用时,||返回true如果操作数是true; 如果两者都是false,则返回false

而不是写作

var name = obj['name'] ? obj['name'] : 'GOD';
Run Code Online (Sandbox Code Playgroud)

你可以使用较短的:

var name = obj['name'] || 'GOD';
Run Code Online (Sandbox Code Playgroud)

||可以多次使用该运算符来创建一个较长的表达式,该表达式的计算结果为第一个非空操作数的值:

var name = obj['name'] || obj['desc'] || 'GOD';
Run Code Online (Sandbox Code Playgroud)