2017-08-12 144 views
0

我刚才看到这个语法在PHP中:JavaScript中有更简单的三元运算符吗?

// 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';

+0

P.S如果我们已经拥有它,请让我知道 –

+4

var name = obj ['name'] || '上帝';' –

+0

谢谢。我很不知道这个.. –

回答

1

在javascript中,你可以做到以下几点:

var name = obj['name'] || "GOD" 

如果第一个值为false(nullfalse0NaN,""undefined),那么第二个值将被分配。

1

Null coalescing operator是PHP的新增内容。它是在PHP 7(2015年12月发布)中推出的,自功能为proposed for the first time以来已有10多年的历史。

在Javascript中,logical OR运营商可用于此目的的年龄(since Javascript was created?!)。

作为documentation说明:

逻辑OR(||

expr1 || expr2

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

而是写作的

var name = obj['name'] ? obj['name'] : 'GOD'; 

你可以使用更短:

var name = obj['name'] || 'GOD'; 

||操作者可以多次使用,以创建一个计算的第一价值较长的表达非空的操作数:

var name = obj['name'] || obj['desc'] || 'GOD'; 
+0

我很好奇:在问题关闭后30分钟,您是如何设法回答问题的? –

+0

我不知道。我回答使用移动应用程序。现在我记得在我发布答案后,问题再次加载并且已经关闭。我当时认为,在我的回答发布后,问题被重新加载,但我现在看到,确实,我的答案的第一个版本在问题结束后30分钟发布。也许Matrix有一个小故障。 :-) – axiac