Javascript 为什么jQuery在try/catch中包装XHR对象创建?
如果我必须在没有jQuery的情况下编写自己的跨浏览器AJAX函数(我是这么做的),我会这样做:Javascript 为什么jQuery在try/catch中包装XHR对象创建?,javascript,jquery,ajax,Javascript,Jquery,Ajax,如果我必须在没有jQuery的情况下编写自己的跨浏览器AJAX函数(我是这么做的),我会这样做: var getXHR = function() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { return new ActiveXObject('Microsoft.XMLHTTP'); } } 但在深入研究jQuery时,我注
var getXHR = function() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject('Microsoft.XMLHTTP');
}
}
但在深入研究jQuery时,我注意到:
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch( e ) {}
}
function createActiveXHR() {
try {
return new window.ActiveXObject( "Microsoft.XMLHTTP" );
}
}
然后:
为什么jQuery开发人员直接在try/catch
块中调用对象构造函数,而不是使用特性检测。我想一个检查比一个简单的if
检查要慢。好处是什么?你的方法很好。在阅读了代码之后,我认为jQuery的开发人员使用这个技巧来创建请求对象并测试
!this.isLocal&&/^(get | post | head | put | delete | options)$/i.test(this.type)和&
在一条语句中没有错误。i其他语言(例如java)try/catch
通常比if
更快,尤其是在没有异常的情况下。BTW,你真的需要在2014年编写的库中支持没有XMLHttpRequest
的浏览器吗?是的。第三方JavaScript.Nice。而且,我怀疑这是一种权衡。失败的try/catch比if/else慢,但该块应该只在一小部分情况下失败。@ggundersen:不,首先要通过“标准”(不是IE)方法,然后通过IE,或者IE在浏览器中仍然很重要,因此第一个方法可能经常失败。:)
createStandardXHR() || createActiveXHR();