我正在尝试在逻辑运算符的两侧使用多个参数的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) == something
不是有效的 JavaScript 代码,会失败。 - adeneoif ( /(banana|apple)/.test(a) )
- adeneo