Rob*_*cks 6 javascript language-agnostic performance conditional-statements
我在浏览器检测脚本中遇到了这种独特的做法.
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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用这种嵌套的If/Else方法有什么好处吗?
如果我将其更改为:
if (){
} else if (){
} else if (){
} else if (){
}
Run Code Online (Sandbox Code Playgroud)
它会运行得慢还是什么?
这被称为“ 箭头反模式 ”(由于与箭头相似)...
如果 如果 如果 如果 做点什么 万一 万一 万一 万一
..几乎总是不利于可读性,除非有一些令人信服的理由离开它。
http://www.codinghorror.com/blog/2006/01/flattening-arrow-code.html
我会把它弄平。
这种情况下switch
还可以用这个语句吗?就像是:
switch ((_3).match(/msie|applewebkit|opera|camino|firefox/i)[0]) {
case 'MSIE' : /* ...; */ break;
case 'AppleWebKit' : /* ...; */ break;
/* ... etc. */
default: BrowserCouldntBeDetermined = true;
}
Run Code Online (Sandbox Code Playgroud)
我坚持之前的答案: else if() 相当于但更具可读性 else { if () ...}
无论如何,您找到并提供的代码看起来有点笨拙,而且由于if...else
除使用方式之外的其他原因,速度并不快。关于代码的含义(除了问题之外),我想说,处理浏览器差异的更好方法是通过对象检测。