Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jQuery在try/catch中包装XHR对象创建?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 为什么jQuery在try/catch中包装XHR对象创建?

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时,我注

如果我必须在没有jQuery的情况下编写自己的跨浏览器AJAX函数(我是这么做的),我会这样做:

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();