我是用在邏輯運算符兩側的if語句具有多參數試驗的兩側。我首先從||開始運營商,如預期的那樣工作:多個條件的邏輯運算符
var a = 'apple', b = 'banana', c = 'cherry';
if (a == 'banana' || a == 'apple' || b == 'banana' || b == 'apple') {
console.log('example 1') // returns
}
if ((a || b) == 'banana' || (a || b) == 'apple') {
console.log('example 2') // returns
}
if (a == ('apple' || 'banana') || b == ('apple' || 'banana')) {
console.log('example 3') // returns
}
if ((a || b) == ('apple' || 'banana')) {
console.log('example 4') // returns
}
到目前爲止,沒有意外的結果。 但是,在替換||時遵循相似的結構運營商爲& &操作,事情並不像我期待他們合作。
if ((a == 'banana' && b == 'apple') || (a == 'apple' && b == 'banana')) {
console.log('example 5') // returns
}
if (((a || b) == 'banana') && ((a || b) == 'apple')) {
console.log('example 6') // DOESN'T RETURN
}
if ((a || b) == 'banana') {
console.log('example 6a') // DOESN'T RETURN - consistent with example 6
}
if ((a == ('apple' || 'banana')) && (b == ('apple' || 'banana'))) {
console.log('example 7') // DOESN'T RETURN
}
if (a == ('apple' || 'banana')) {
console.log('example 7a') // returns - inconsistent with example 7
}
if (b == ('apple' || 'banana')) {
console.log('example 7b') // DOESN'T RETURN - inconsistent with example 7a
}
if ((a && b) == ('apple' || 'banana')) {
console.log('example 8') // DOESN'T RETURN
}
if ('apple' == (a || b) && 'banana' == (a || b)) {
console.log('example 9') // DOESN'T RETURN
}
現在,我想知道:在我的邏輯中是否存在缺陷,或者它可能不會以這種方式完成?爲了可讀性和可維護性,我的目標是儘可能簡短地編寫這些if語句。顯然我只是在探索可能性。
有誰知道任何方式去嗎?特別是7/7a/7b的例子看起來很奇怪,因爲儘管結構類似,它仍然會產生不一致的結果 [Fiddle]
不,不能那麼做,'(A || B) ==某些東西'是無效的JavaScript並失敗。 – adeneo
(a || b)=='banana'應該是(a =='banana'|| b =='banana') – SajithNair
作爲旁註,你可以做'if(/(banana|apple)/.test (a))' – adeneo