2010-11-27 20 views
6

Me encontré con esta práctica única en una secuencia de comandos de detección de navegador.¿Hay alguna ventaja en un If/Else anidado en lugar de Else If?

if (/MSIE/.test(_3)) { 
    IE = true; 
} else { 
    if (/AppleWebKit/.test(_3)) { 
     Safari = true; 
    } else { 
     if (/Opera/.test(_3)) { 
      Opera = true; 
     } else { 
      if (/Camino/.test(_3)) { 
       Camino = true; 
      } else { 
       if (/Firefox/.test(_3) || /Netscape/.test(_3) ||) { 
        Mozilla = true; 
       } 
      } 
     } 
    } 
} 

¿Hay alguna ventaja en el uso de este método anidado If/Else?

¿Qué pasa si acabo de cambiar a:

if(){ 
} else if(){ 
} else if(){ 
} else if(){ 
} 

¿Sería correr más lento o algo?

Respuesta

4

En este caso, también se podría utilizar la declaración switch? Algo así como:

switch ((_3).match(/msie|applewebkit|opera|camino|firefox/i)[0]) { 
    case 'MSIE' : /* ...; */ break; 
    case 'AppleWebKit' : /* ...; */ break; 
    /* ... etc. */ 
    default: BrowserCouldntBeDetermined = true; 
} 

I adherirse a la respuesta anterior: else if() es equivalente a más legible, pero luego else {if() ...}

De todos modos, el código que encontró y se le ofrecerán miradas un poco torpe y no muy rápido por otras razones distintas de la forma en que se usa if...else. En cuanto al significado del código (y aparte de la pregunta), diría que una mejor manera de encargarse de las diferencias del navegador es por object detection.

11

No cambiará nada más que la sangría y la legibilidad. Todavía el mismo código, absolutamente equivalente :-) Definitivamente lo cambiaría, ya que lo haría más legible. La sangría generalmente significa anidar, mientras que aquí no hay anidación.