2011-06-25 10 views
12

que estoy haciendo una instrucción switch interruptor en javascript:usando el operador OR en javascript comunicado

switch($tp_type){ 

    case 'ITP': 
    $('#indv_tp_id').val(data); 
    break; 

    case 'CRP'||'COO'||'FOU': 
    $('#jurd_tp_id').val(data); 
    break; 

} 

Pero creo que no funciona si uso operador OR. ¿Cómo hago esto correctamente en javascript? Si elijo ITP, obtengo ITP. Pero si elijo COO, FOU o CRP siempre obtengo el primero que es CRP. Por favor ayuda, gracias!

+1

ver también [JavaScript o expresión en un caso de interruptor] (http://stackoverflow.com/questions/6513585/javascript-or-expression-in-a-switch-case). –

Respuesta

51

Debe volver a escribir así:

case 'CRP': 
case 'COO': 
case 'FOU': 
    $('#jurd_tp_id').val(data); 
    break; 

Se puede ver documentado en la referencia switch. El comportamiento de case declaraciones consecutivos sin break s en el medio (llamada "caída transparente") se describe allí:

La sentencia break opcional asociado a cada etiqueta de la caja asegura que el programa se desata del interruptor una vez la declaración emparejado se ejecuta y continúa la ejecución en la instrucción siguiente al cambio. Si se omite el descanso, el programa continúa la ejecución en la siguiente sentencia en la sentencia switch.

En cuanto a por qué su versión sólo funciona para el primer artículo (CRP), es simplemente porque la expresión se evalúa como 'CRP'||'COO'||'FOU''CRP' (ya que las cadenas no vacías evalúan a true en contexto booleano). De modo que la declaración case es equivalente a solo case 'CRP': una vez evaluada.

+6

Esto se llama "fall-through": http://en.wikipedia.org/wiki/Switch_case. Al poner cada 'case' en una línea separada, es más fácil leer IMO. –