我在浏览器检测脚本中遇到了这种独特的做法。
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 (){
}
它会慢慢运行吗?
答案 0 :(得分:11)
除了缩进和可读性之外,它不会改变任何其他内容。仍然是相同的代码,完全相同:-)我肯定会改变它,因为它会使它更具可读性。缩进通常意味着嵌套,而这里没有嵌套。
答案 1 :(得分:4)
在这种情况下,还可以使用switch
语句吗?类似的东西:
switch ((_3).match(/msie|applewebkit|opera|camino|firefox/i)[0]) {
case 'MSIE' : /* ...; */ break;
case 'AppleWebKit' : /* ...; */ break;
/* ... etc. */
default: BrowserCouldntBeDetermined = true;
}
我坚持上一个答案:否则if()相当于但更可读,那么{if()...}
无论如何,您找到并呈现的代码看起来有点笨拙,并且由于其他原因而不是if...else
的使用方式。关于代码的含义(除问题外),更好的方法来处理浏览器差异是object detection我想说的。
答案 2 :(得分:4)
这被称为“the arrow anti-pattern”(由于与箭头的相似性)......
if if if if do something endif endif endif endif
..除了有一些令人信服的理由离开它之外,它几乎总是对可读性不好。
http://www.codinghorror.com/blog/2006/01/flattening-arrow-code.html
我会压扁它。