我是用在逻辑运算符两侧的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