El problema con el ejemplo es que la expresión se evalúa como ('foo' || 'bar')
'foo'
, y por lo tanto sólo igualará cuando i
es 'foo'
, y nunca cuando i
es 'bar'
.
El operador ||
produce el valor de su primer operando si el primer operando es verdadero. De lo contrario, produce el valor del segundo operando. Una cadena no vacía siempre es cierta, y es por eso que su expresión está retornando 'foo'
.
Sin embargo, en JavaScript cada case
cae en el siguiente caso a menos que interrumpa explícitamente el flujo con break
o return
. Por lo tanto usted puede fácilmente hacer que funcione de la siguiente manera:
switch(i) {
case 'foo':
case 'bar':
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
Duh! Gracias. No sé cómo no pensé en eso. editar - ¡gracias a todos! Perdón por ser un idiota. – Greg