我很想谈谈这段代码更高效的一些其他意见。基本上在下面的代码中,有一个setInterval循环,并且在循环中运行代码之前,我需要4个要求。所以在第1节中,我写了一个if语句来检查所有4.工作正常。Javascript:什么是更有效率,IF块或TRY/CATCH?
然后我切换到只使用try/catch,我想要执行的代码坐在try {}中。逻辑是,在每个循环中,都会生成一个异常,但是会针对每个无效条件进行抑制。在所有条件都成立的最后一个循环中,代码执行并清除间隔。
要么工作。我喜欢try/catch方法,因为我需要编写更少的条件代码,并担心中断。但我担心try/catch效率非常低,特别是在100ms的setInterval()循环中。这里对于其他聪明人心态有什么看法?
的try/catch
var intvar = setInterval(function(){
try{
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}catch(err){}
},100);
IF块
var intvar = setInterval(function(){
if(typeof jQuery == 'function' && typeof nav == 'object' && typeof pageid != 'undefined' && typeof document.getElementById('leftnav') == 'object'){
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}
},100);
完全与此相当大胆的这一说法。例如。在Python [`尝试except`是首选(http://stackoverflow.com/questions/1835756/using-try-vs-if-in-python)另外,说什么是“昂贵”的一些数据将是不错。再次,在Python [“如果”更“昂贵”](http://stackoverflow.com/a/3929887/1167879)。 – 2013-02-23 18:11:28
当然,OP在询问Javascript而不是Python。另外,您可能想要阅读您提供的链接。它说的基本上与cdmckay所做的一样:使用异常来处理特殊情况。 – JAB 2015-11-12 17:48:56
@AlexOkrushko的EAFP理念,更容易请求原谅比许可,由Python社区没有JS采纳。 – 2017-05-18 09:38:43