2015-02-06 23 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; 
相關問題