我们在 JavaScript 中有更简单的三元运算符吗? [复制]
Posted
技术标签:
【中文标题】我们在 JavaScript 中有更简单的三元运算符吗? [复制]【英文标题】:Do we have a simpler ternary operator in JavaScript? [duplicate] 【发布时间】:2018-01-20 15:38:10 【问题描述】:我刚刚在 php 中看到了这种语法:
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
为什么我们在 javascript 中没有相同的功能?
我已经厌倦了:
var name = obj['name'] ? obj['name'] : 'GOD';
【问题讨论】:
P.S 如果我们已经有了,请告诉我var name = obj['name'] || 'GOD';
您的意思是条件运算符。根据定义,三元运算符需要三个操作数——这就是三元这个词的含义。三元运算符不能比一个需要三个操作数的运算符更简单 - 因为一个需要两个操作数的运算符,例如 ??这里显示的是二元运算符,就像 PHP 中的算术运算符和 concat 运算符一样。
【参考方案1】:
Null coalescing operator 是最近添加到 PHP 中的。它是在 PHP 7(2015 年 12 月发布)中引入的,比 proposed for the first time 早了 10 多年。
在 Javascript 中,logical OR 操作符可用于此目的很长时间 (since Javascript was created?!)。
正如documentation 解释的那样:
逻辑或 (
||
)
expr1 || expr2
如果可以转换为
true
,则返回expr1
;否则,返回expr2
。 因此,当与布尔值一起使用时,如果任一操作数为true
,||
将返回true
;如果两者都是false
,则返回false
。
而不是写
var name = obj['name'] ? obj['name'] : 'GOD';
你可以使用更短的:
var name = obj['name'] || 'GOD';
||
运算符可以多次使用以创建更长的表达式,该表达式的计算结果为第一个非空操作数的值:
var name = obj['name'] || obj['desc'] || 'GOD';
【讨论】:
我很好奇:您是如何在问题结束 30 分钟后发布答案的? 我不知道。我使用移动应用程序回答。现在我记得,在我发布答案后,问题再次加载并且已经关闭。当时我认为它在我的答案发布和问题重新加载之间关闭,但现在我看到,确实,我的答案的第一个版本是在问题关闭后 30 分钟发布的。也许矩阵中有一个小故障。 :-)【参考方案2】:在 javascript 中,您可以执行以下操作:
var name = obj['name'] || "GOD"
如果第一个值为 false(null
、false
、0
、NaN
、""
或 undefined
),则将分配第二个值。
【讨论】:
以上是关于我们在 JavaScript 中有更简单的三元运算符吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript三元表达式&分支流程控制 switch 语句