2012-01-29 35 views
14

if-else的javascript簡寫可以返回一個函數嗎?如果是的話,這將如何工作。Javascript速記if-else並返回

例如。 我有這樣的:

if(boolean){ 
return; 
} 

,我想將它寫爲這樣:

(value)? return; 

Chrome的抱怨,回報是意外。無論如何寫這樣的東西,這是有效的?

+2

這不是if-else的簡寫。這是一個完全不同的結構,而且不適合這項任務。 – 2012-01-29 19:39:13

+3

真的很傷心,這不起作用:'someVal && return;'。控制檯說「意外的令牌返回」。 – 2015-09-03 15:03:28

回答

24

不,你不能這樣做,除非你返回一個值。例如,如果你的函數必須返回你可以寫一個值:

return boolean ? 'foo' : 'bar'; 

但你不能使用條件運算符返回void停止功能的執行。

1

你想要做一個ternary operator

這是這樣的:

(bool) ? ifTrue : ifFalse; 

請注意:你不能省略三元運算符的其他部分。

http://en.wikipedia.org/wiki/Ternary_operation

+0

我不認爲你明白代碼的「長」版本實際*做了什麼* ... – Shog9 2012-01-29 19:52:23

+2

不,我明白了。但似乎他試圖使用一個三元運算符,並試圖強迫它按照他原先的「長」陳述的方式行事。如果他只是想用一個if語句的無花樣大括號,他本可以這麼說。 *聳聳肩* – Kristian 2012-01-30 06:39:40

9

如果您打算從功能在這一點在其執行無論測試是否判斷爲真或假,你可以使用返回,

return (value) ? 1 : 2; 

但是,如果你僅僅是希望在測試評估爲真時提前返回(例如,作爲參數無效時防止執行的健全性檢查),最短的時間可以是:

if (boolean) return; 
+2

只有第二個行爲與問題中的第一個例子相同。但它確實短一些 - 很好地說明包括括號和換行符在內的多麼殘酷可以導致想要在腳下射擊自己! – Shog9 2012-01-29 19:54:28

+0

良好的編輯@ Shog9,我總是缺乏文字。 – 2012-01-29 20:09:51

0

條件「三元運算符」(condition ? expression to evaluate when true : expression to evaluate when false)通常用於簡單條件變量賦值。

,如果你需要:

if(x > 0) { 
    a = 10; 
}else{ 
    a = 30; 
} 

你可以寫:

a = (x>0)? 10 : 30; 

你可以認爲它像一個簡單的功能,這需要3個參數(P1,P2,P3),如果P1是真的,它返回p2,如果p1是假的,則返回p3。

(p1)? p2 : p3; 

就如同這樣的功能,有沒有辦法爲它引起功能基礎上,條件回報。它是而不是因此是if/else的簡寫。

3
if(boolean) return; 

單行,可讀,完全有效;