2011-11-07 23 views
0

我有一個'如果'的聲明,只是想知道這些是否都是有效的(我相信他們是),如果是的話有什麼區別?這個'IF'語句中'OR'和'AND'的正確語法是什麼?

var type; 
var type2; 

if ((type == 'BOS'|| type == 'BPS'|| type == 'BRS') && (type2 == 'BOS'|| type2 == 'BPS'|| type2 == 'BRS)) 

OR

if ((type == 'BOS') || (type == 'BPS') || (type == 'BRS') && (type2 == 'BOS') || (type2 == 'BPS') || (type2 == 'BRS')) 

它具有正確的語法,做他們想做什麼不同?有沒有辦法縮短這個陳述?

感謝

+0

I ** **認爲的和運營商具有更強的結合,因此第一個表達式具有用於您的目的的正確語法。 – Smamatti

+1

ref:[Operator Precedence](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence) – Yoshi

回答

5

這兩個陳述是不同的。是的,它們在語法上都是有效的陳述,但在邏輯上它們是不同的。由於運算符具有比||更高的優先級,在javscript, 所得邏輯將評估如陳述2如下:

1) (type == 'BRS') && (type2 == 'BOS') 
2) (type == 'BOS') || (type == 'BPS') || (result of 1) || (type2 == 'BPS') || (type2 == 'BRS') 

雖然陳述1:

1) (type == 'BOS'|| type == 'BPS'|| type == 'BRS') 
2) (type2 == 'BOS'|| type2 == 'BPS'|| type2 == 'BRS') 
3) (result of 1) && (result of 2) 
+0

啊我明白了,謝謝 – zik

2
var type1; 
var type2; 

var correct_value = { 
    BRS: 1, 
    BOS: 1, 
    BPS: 1 
}; 

if(correct_value[type1] && correct_value[type2]) { 
    alert('ok'); 
} 
else { 
    alert('not ok'); 
} 
+0

+1,用於提高可讀性。 –

0

兩個條件語句是有效的,但結果可能會有所不同。

第一條語句將評估第一個括號中的OR值,然後評估第二個括號中的OR值,最後評估AND運算符。

第二條語句首先評估AND,然後從左向右評估而沒有特定的優先級(如第一條)。

你必須知道你實際使用哪一個來確定它的最佳重構代碼。

看到這個鏈接:Operator Precedence

+0

我相信第二個陳述將首先評估AND(並非嚴格從整個陳述的左邊到右邊) – Bryan

+0

是的,Brian。我的意思是,'AND'會先進行,但在此之後,它將從左到右進行評估。編輯我的答案。謝謝! –