192

如何在JavaScript中使用嵌入式if聲明?是否也有內聯else聲明?如何在JavaScript中編寫內聯IF語句?

事情是這樣的:

var a = 2; 
var b = 3; 

if(a < b) { 
    // do something 
} 
+11

哪裏jQuery的嗎?無論如何,我並不真正理解這個問題。 – Marc 2012-04-22 17:39:33

+0

jquery的一部分可能是這樣的(文檔)$。就緒(函數(){ VAR一個= 2; 變種B = 3; 如果(A takeItEasy 2012-04-22 17:49:48

+0

它的一個knockoutjs問題也 – 2014-07-17 22:27:33

回答

434

你不一定需要jQuery的。僅JavaScript就可以做到這一點。

var a = 2; 
var b = 3;  
var c = ((a < b) ? 'minor' : 'major'); 

c的變量將是minor如果值是true,和major如果該值是false


這被稱爲有條件(三元)運算符。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator

+51

它說明如何使用內聯IF,它完全回答問題。 – MattW 2012-04-22 17:46:50

+17

需要注意的是,在這種情況下所有parens都是可選的。通常情況下,個人偏好/編碼風格決定了它們何時被使用。 – 2012-04-22 18:46:16

+0

@WillKlein你說所有parens是可選的,但當我這樣做()?:而不是(()?:)我得到不同的結果。我只知道這一點,因爲我試圖像它在PHP中。 – khany 2014-12-05 14:20:22

13

嗯,如果你在JavaScript中的意思,那麼你可以這樣做:

a < b ? /*do something*/ : /*do something else*/; 
+1

我喜歡這個答案。簡單,並點 – shlomia 2016-02-02 12:17:27

31

有一個三元運算符,就像這樣:

var c = (a < b) ? "a is less than b" : "a is not less than b"; 
+2

它實際上並不需要分配給任何東西。右側元素可以簡單地作爲函數調用。 – jfriend00 2012-04-22 17:41:58

+7

他們甚至不需要函數調用......'0 <1:5:120;'是一個完全有效的語句。但是,除非您按行付費,否則一點用處都沒有用。 – Ryan 2012-04-22 17:43:02

+0

好的,@ jfriend00,minitech,謝謝你的提示。 – 2012-04-22 17:45:15

31

對於寫if聲明內聯,它裏面的代碼應該只有一個說法:

if (a < b) // code to be executed without curly braces; 
15
<div id="ABLAHALAHOO">8008</div> 
<div id="WABOOLAWADO">1110</div> 

parseInt($('#ABLAHALAHOO').text()) > parseInt($('#WABOOLAWADO).text()) ? alert('Eat potato') : alert('You starve'); 
+35

我甚至都不知道我剛纔讀的是什麼,但我很難笑。 – Jazz 2013-02-01 23:27:09

+0

太有趣了+1 – 2013-11-03 12:07:38

23

用簡單的英文,解釋的語法:

if(condition){ 
    do_something_if_condition_is_met; 
} 
else{ 
    do_something_else_if_condition_is_not_met; 
} 

可以寫爲:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met; 
+2

如果沒有「else」語句就可以做到這一點嗎?即'條件?真正的' – 2017-05-15 18:25:14

3

要添加到這一點,你也可以內嵌如果條件與& &和使用||運營商。 像這樣

var a = 2; 
var b = 0; 

var c = (a > b || b == 0)? "do something" : "do something else"; 
19

你也可以使用邏輯運算符來近似一個if/else。

(a && b) || c 

以上是大致相同的話說:

a ? b : c 

當然,大致相同:

if (a) { b } else { c } 

我說大概因爲這種方法的一個區別,因爲你必須知道b的價值會被評估爲真實的,否則你將永遠得到c。基本上你必須認識到,出現if() { here }的部分現在是你放置if (here) { }的條件的一部分。

以上是可能的,因爲傳遞/返回形成邏輯表達式的原始值之一的JavaScript行爲取決於操作符的類型。某些其他語言(如PHP)會繼續執行操作的實際結果,即真或假,表示結果始終爲真或假; e.g:

14 && 0   /// results as 0, not false 
14 || 0   /// results as 14, not true 
1 && 2 && 3 && 4 /// results as 4, not true 
true && ''  /// results as '' 
{} || '0'  /// results as {} 

一個主要的好處,與正常的if語句相比,是前兩種方法可以作爲賦值的部分上的自變量即右手側進行操作。

d = (a && b) || c; 
d = a ? b : c; 

if `a == true` then `d = b` else `d = c` 

用一個標準來實現這個if語句將複製分配新建分配FY的唯一方法:

if (a) { d = b } else { d = c } 

你可能會問,爲什麼只使用Logical Operators代替Ternary Operator,對於簡單的情況下,你可能止跌除非你想確保ab都是真的。您還可以使用邏輯運算符實現更簡化的複雜條件,使用嵌套的三元運算可能會非常混亂......然後,如果您希望代碼易於閱讀,則這兩者都不那麼直觀。

+1

大拇指的想法,而不使用'if .. else ..'。 http://qr.ae/RwmrBb – 2015-11-12 05:45:25

9

如果你只是想一個內聯IF(沒有ELSE),您可以使用邏輯運算符:如果你需要一個ELSE也

(a < b) && /*your code*/; 

,使用三元操作,其他人建議。

0

這不是問題的根本:我可以寫下面的內容嗎?

if (foo) 
    console.log(bar) 
else 
    console.log(foo + bar) 

答案是肯定的,上面會翻譯。

但是,要警惕這樣做的以下

if (foo) 
    if (bar) 
    console.log(foo) 
    else 
    console.log(bar) 
else 
    console.log(foobar) 

一定要在大括號包裹曖昧代碼上面會拋出異常(以及類似的排列會產生不希望的行爲。)

2

僅供參考,您可以撰寫conditional operators

var a = (truthy) ? 1 : (falsy) ? 2 : 3; 

如果你的邏輯是足夠複雜,那麼你可以考慮使用IIFE

var a = (function() { 
    if (truthy) return 1; 
    else if (falsy) return 2; 
    return 3; 
})(); 

當然,如果你打算使用這個邏輯不止一次,那麼你有啥可將其封裝在一個功能,以保持整潔,乾燥。

2

我經常需要使用運行每個條件更多的代碼,:(, ,)多個代碼元素可以執行:

var a = 2; 
var b = 3; 
var c = 0; 

(a < b ? (alert('hi'), a=3, b=2, c=a*b) : (alert('by'), a=4, b=10, c=a/b));