2010-11-27 150 views
6

我在瀏覽器檢測腳本中遇到了這種獨特的做法。嵌套的If/Else而不是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; 
       } 
      } 
     } 
    } 
} 

使用這種嵌套的If/Else方法有什麼好處嗎?

如果我只是把它改爲:

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

它會運行速度較慢或什麼?

回答

4

在這種情況下,還可以使用switch聲明?喜歡的東西:

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

我堅持以前的答案:否則,如果()等同於更可讀然後其他{如果()...}

無論如何,你發現並提出的外表代碼有點笨拙,並不是因爲其他原因而使用if...else以外的其他原因。關於代碼的含義(除了這個問題)之外,我想說的是,更好的方式來照顧瀏覽器的差異是object detection

11

除了縮進和可讀性以外,它不會改變任何東西。仍然是相同的代碼,完全相同:-)我肯定會改變它,因爲它會使它更具可讀性。縮進通常意味着嵌套,而這裏沒有嵌套。