Múltiples condiciones en la declaración if en ambos lados del operador lógico

Estaba experimentando con tener múltiples argumentos en una declaración if en ambos lados del operador lógico. Empecé con el || operador, que funcionó como se esperaba:

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
}

Hasta el momento, no hay resultados inesperados. Sin embargo, al seguir una estructura similar al reemplazar el || operador para el operador &&, las cosas no funcionan como esperaba.

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
}

Ahora, me pregunto: ¿hay una falla en mi lógica o simplemente no se puede hacer de esta manera? Mi objetivo es escribir estas declaraciones si lo más cortas posible, con el fin de facilitar la lectura y el mantenimiento. Claramente solo estoy explorando posibilidades.

¿Alguien sabe alguna manera de hacer esto? Especialmente el ejemplo 7 / 7a / 7b me parece peculiar porque produce resultados inconsistentes a pesar de una estructura similar [Violín]

Respuestas a la pregunta(5)

Su respuesta a la pregunta