2015-02-06 55 views
0

我希望能够做到以下几点:如何在javascript中为变量设置一行代码?

假设我有3个变量:

  • var a1;
  • var a2;
  • var x;

我希望能够设置“x”:

  • 为等于a1如果不是null
  • 为等于a2如果a1不是null
  • 为等于如果a2既a1和a2被定义a1
  • 为等于空如果a1a2都是null

是否有JavaScript的一条线,我可以做到这一点用?

目前我做的:

var x; 

if (a2) { 
x = a2; 
} 

if (a1) { 
x = a1; 
} 
+0

'var x; x = a1? a1:(a2?a2:null)' – levi 2015-02-06 17:14:16

+0

当然,你可以做到一行,但为什么一行?编写它以便它易于阅读,然后使用缩小器。 – 2015-02-06 17:18:09

回答

4

假设你只在乎值是否falsy而不是相同null,使用||

var x = a1 || a2 || null; 

的 “与” 和 “或” 运算符在任何受C语言影响的语言中短路。结合Javascript的真实性概念,这是一个强大的功能。用它。

+1

这可能适用于大多数场景,但如果'a1'或'a2'是虚假的(例如'false'或''''),则不起作用。 – cmbuckley 2015-02-06 17:14:21

+0

a1或a2是空或对象,所以不需要考虑假或'' – Rolando 2015-02-06 17:15:16

+0

我建议使用&&从OP要求... – 2015-02-06 17:15:21

0

使用?操作

var x; x = a1 ? a1 : (a2 ? a2: null) 
2

可以使用ternary expression。这将允许您通过一个条件,而不是默认为undefined/null检查。这是一种短路情况。

就像C#和Java,表达只会被评估如果且仅当,所述表达是匹配的一个给定的条件;另一个表达式将不会被评估。 [2]

var x = a1 != null ? a1 : a2 != null ? a2 : null; 

虽然? and :使用看起来像猫王运算符(?:),在JavaScript中使用|| (OR logical operator)执行null coalescing为默认值。

var x = a1 || a2 || null; 
相关问题