2010-11-27 7 views
6

Ich bin in einem Browser-Erkennungsskript auf diese einzigartige Vorgehensweise gestoßen.Gibt es irgendwelche Vorteile für eine verschachtelte If/Else anstelle von Else If's?

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; 
       } 
      } 
     } 
    } 
} 

Gibt es Vorteile bei der Verwendung dieser verschachtelten If/Else-Methode?

Was passiert, wenn ich änderte es nur:

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

Wäre es langsamer oder etwas laufen?

Antwort

4

In diesem Fall könnte die switch Anweisung auch verwendet werden? Etwas wie:

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

Ich an der vorherigen Antwort: else if() entspricht aber mehr lesbar dann else {if() ...}

Wie auch immer, der Code, den Sie gefunden und präsentiert Looks ein bisschen ungeschickt und nicht wirklich schnell aus anderen Gründen als if...else verwendet wird. In Bezug auf die Bedeutung des Codes (und abgesehen von der Frage), ist eine bessere Möglichkeit, um Browser Unterschiede zu kümmern, object detection Ich würde sagen.

11

Es wird nichts anderes als die Einrückung und Lesbarkeit ändern. Immer noch derselbe Code, absolut äquivalent :-) Ich würde es aber definitiv ändern, da es dadurch lesbarer wird. Einrückung bedeutet normalerweise Verschachtelung, während hier keine Verschachtelung stattfindet.

Verwandte Themen